0
WC_LISTVIEWコントロールを使用して、実行時にデータが埋め込まれたテーブルを作成しています。テーブルは正常に動作しています。しかし、私は1つのセルに複数の行を表示することはできません。Win32 APIで改行を含むテキストを追加ListView
改行を使用する方法はありますか(例:\n
)。
これは私がテーブルを作成する方法である:
HWND listViewErrors = CreateWindow(WC_LISTVIEW, L"",
WS_VISIBLE | WS_BORDER | WS_CHILD | LVS_REPORT | LVS_SINGLESEL,
17, 27, errorsRect.Width() - 12, errorsRect.Height() - 25,
GetWindowHandle(), (HMENU)ID_LIST_ERRORS, NULL, 0);
私はこのような行を追加します。結果は、改行文字(\n
)はもう見えないということですが、
LVITEM lvi = { 0 };
lvi.mask = LVIF_TEXT;
lvi.pszText = L"Label of an entry";
int ret = ListView_InsertItem(hwndList, &lvi); // Main item
if (ret >= 0)
{
ListView_SetItemText(
hwndList,
ret,
1,
L"A description containing\nline breaks, but the\nline breaks will be\nignored."); // Sub item
}
return ret;
をテキストは1行に残ります。限り、あなたはカスタムリストビューウィンドウは、レポートモードでの複数行のエントリをサポートしていません描くかOwnerDrawする使用しないよう
xMRiで提案されているようにオーナー描画でこれを実装するのは難しいことがあります。アイテムの高さは動的に計算する必要があります。たとえば、列のサイズを変更すると変更されます。あるいは、単一行のテキストに固執し、 'LVS_EX_LABELTIP'を設定して、列に収まらないテキストをツールチップとして表示します(ただし、ツールチップが改行をサポートしているかどうかはわかりません)。ツールヒントの代わりに、常に表示される読み取り専用の編集コントロールを追加して、選択の変更やマウスオーバー時に全文を表示することもできます。 – zett42