Win32 API ListView创建(C++)

das*_*s_j 2 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);
Run Code Online (Sandbox Code Playgroud)

但是如果我编译并执行代码,只会显示一个空白窗口.编译器:Windows 7(x86)上的MinGW.

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

SCh*_*rin 7

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

  • 什么是"Windows 7设计"?你指的是视觉主题吗?你需要提供一个ComCtrl32 v6清单来启用它.除非您想利用ComCtrl32 v6中引入的新功能,否则代码中的任何内容都不会更改. (2认同)

Rem*_*eau 5

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

您需要:

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

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

    list = CreateWindowExW(..., WC_LISTVIEWW, ...);
    
    Run Code Online (Sandbox Code Playgroud)