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

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

于 2012-12-20T20:18:02.407 回答
5

WC_LISTVIEWW(注意最后的额外 W )是 a wchar_t*,但您将其类型转换为 a char*UNICODE只有在未定义时才会编译,使通用CreateWindowEx()映射为CreateWindowExA(). 这意味着您正在尝试使用 Ansi 版本的CreateWindowEx(). 那不管用。

您需要:

  1. 使用泛型WC_LISTVIEW,使其匹配泛型CreateWindowEx(),并摆脱类型转换:

    list = CreateWindowEx(..., WC_LISTVIEW, ...);
    
  2. 继续使用WC_LISTVIEWW,但CreateWindowExW()改为调用:

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