我对WIN32 API中所有的“窗口”诗句"listbox“的内容感到难以置信的困惑。我只是试图创建一个窗口作为一个“列表框”,并添加元素。我的最终目标将是一个类似于on这里的列表框:http://msdn.microsoft.com/en-us/library/windows/desktop/hh298365%28v=vs.85%29.aspx

我首先创建一个具有如下列表框的窗口:
hDlg = CreateWindowExA(
WS_EX_CLIENTEDGE,
"ListBox",
"The title of my window",
WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
NULL, NULL, hInstance, NULL);但据我所知,hDlg现在指向整个窗口,而不是列表框。
理想情况下,我希望能够向列表框中添加类似于以下内容的项:
int pos = (int)SendMessage(hwndList, LB_ADDSTRING, 0,
(LPARAM) "Test Item1"); 但是,我无法以与教程相同的方式获得列表的句柄,因为它们使用以下行:
HWND hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE); 但是IDC_LISTBOX_EXAMPLE抛出一个编译错误,因为它没有包含在任何地方。对于我的生活,我不能谷歌一个正确的结果第二个参数int nIDDlgItem。
请有人向我解释一下,我是如何找到值GetDlgItem()的,还是从CreateWindowExA()找到我的列表框的句柄?
发布于 2014-03-05 19:52:34
问题在于您正在使用预定义的ListBox窗口类来创建顶级窗口。
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...这将创建一个listbox控件。CreateWindowEx的第二个参数指定了window类--这告诉系统要创建哪种类型的窗口。因为您要为该值传递"ListBox",所以它将创建ListBox类的一个实例。
问题是你正在创建这个窗口成为一个顶级的窗口。WS_OVERLAPPEDWINDOW是用于顶层窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口)。子窗口(如listbox控件)需要设置WS_CHILD样式。
您真正需要做的是使用RegisterClass为顶级窗口注册您自己的窗口类。在调用CreateWindowEx创建主窗口时,您将使用这个类名,然后将创建各种控件作为该窗口的子控件。
https://stackoverflow.com/questions/22207539
复制相似问题