2

C++でListViewを作成したい。これまでの私のコード:

InitCommonControls(); // Force the common controls DLL to be loaded.
HWND list;

// window is a handle to my window that is already created.
list = CreateWindowEx(0, (LPCSTR) WC_LISTVIEWW, NULL, WS_VISIBLE | WS_CHILD | WS_BORDER | LVS_SHOWSELALWAYS | LVS_REPORT, 0, 0, 250, 400, window, NULL, NULL, NULL);

LVCOLUMN lvc; 
lvc.mask = LVCF_FMT | LVCF_WIDTH | LVCF_TEXT | LVCF_SUBITEM;
lvc.iSubItem = 0;
lvc.pszText = "Title";
lvc.cx = 50;
lvc.fmt = LVCFMT_LEFT;
ListView_InsertColumn(list, 0, &lvc);

しかし、コードをコンパイルして実行すると、空白のウィンドウが表示されます。コンパイラ:Windows 7(x86)上のMinGW。

誰かがリストビューを正しく表示するのを手伝ってもらえますか?

4

2 に答える 2

7

これは、WindowsAPIおよびCで記述されたListViewコントロールの元のMSDNサンプルコードへのリンクです。VC++2010でコンパイルされます。

于 2012-12-20T20:18:02.407 に答える
5

WC_LISTVIEWW(最後に余分なWがあることに注意してください)はwchar_t*ですが、これを。に型キャストしていchar*ます。UNICODEが定義されていない場合にのみコンパイルされ、への汎用CreateWindowEx()マップが作成されCreateWindowExA()ます。これは、Ansiバージョンの。でUnicodeウィンドウを作成しようとしていることを意味しますCreateWindowEx()。それは機能しません。

次のいずれかを行う必要があります。

  1. WC_LISTVIEWジェネリック()と一致するようにジェネリックを使用しCreateWindowEx、型キャストを削除します。

    list = CreateWindowEx(..., WC_LISTVIEW, ...);
    
  2. を使用し続けWC_LISTVIEWWますが、代わりに呼び出しCreateWindowExW()ます:

    list = CreateWindowExW(..., WC_LISTVIEWW, ...);
    
于 2012-12-20T21:00:50.650 に答える