【发布时间】:2014-03-05 19:39:15
【问题描述】:
我对 WIN32 API 中的整个“窗口”和“列表框”这件事感到非常困惑。我只是想创建一个窗口作为“列表框”并向其中添加元素。我的最终目标将是一个类似于此处的列表框: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() 找到我的列表框的句柄吗?
【问题讨论】:
-
屏幕截图不是从该代码生成的,该列表框是 WS_CHILD。
-
那是我困惑的一部分......他们在“如何创建示例列表框”中没有提到 WS_CHILD......
-
“先决条件:Windows 用户界面编程。”在处理此示例之前,您应该知道这一点,因此它不会显示 CreateWindowEx() 调用。它实际上是一个 DialogBox() 调用。 Petzold 很好地解释了这一点。