2017-11-02 27 views
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する使用しないよう

enter image description here

+0

xMRiで提案されているようにオーナー描画でこれを実装するのは難しいことがあります。アイテムの高さは動的に計算する必要があります。たとえば、列のサイズを変更すると変更されます。あるいは、単一行のテキストに固執し、 'LVS_EX_LABELTIP'を設定して、列に収まらないテキストをツールチップとして表示します(ただし、ツールチップが改行をサポートしているかどうかはわかりません)。ツールヒントの代わりに、常に表示される読み取り専用の編集コントロールを追加して、選択の変更やマウスオーバー時に全文を表示することもできます。 – zett42

答えて

6

カスタムドローやオーナードローを使用しても、すべての行の高さは同じになります。

関連する問題