Win32 API ListView创建(C ++)

时间:2012-12-20 19:45:22

标签: c++ winapi mingw win32gui

我想用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。

有人可以帮我正确显示列表视图吗?

2 个答案:

答案 0 :(得分:7)

以下是使用Windows API和C编写的ListView control原始MSDN示例代码的链接。 它在VC ++ 2010中编译。

答案 1 :(得分:4)

WC_LISTVIEWW(注意结尾的额外W)是wchar_t*,但是您将其输入char*。只有在未定义UNICODE的情况下才会进行编译,从而将通用CreateWindowEx()地图设为CreateWindowExA()。这意味着您正在尝试使用Ansi版本CreateWindowEx()创建Unicode窗口。那不行。

您需要:

  1. 使用通用WC_LISTVIEW,因此它匹配通用CreateWindowEx(),并摆脱类型转换:

    list = CreateWindowEx(..., WC_LISTVIEW, ...);
    
  2. 继续使用WC_LISTVIEWW,但请致电CreateWindowExW()

    list = CreateWindowExW(..., WC_LISTVIEWW, ...);