Winapi 从窗口句柄获取列表框句柄
我被WIN32 API中的“窗口”和“列表框”这两个词弄糊涂了。我只是尝试创建一个窗口作为“列表框”,并向其中添加元素。我的最终目标是创建一个类似于以下内容的列表框: 我首先创建一个带有列表框的窗口,如下所示:Winapi 从窗口句柄获取列表框句柄,winapi,listbox,window,Winapi,Listbox,Window,我被WIN32 API中的“窗口”和“列表框”这两个词弄糊涂了。我只是尝试创建一个窗口作为“列表框”,并向其中添加元素。我的最终目标是创建一个类似于以下内容的列表框: 我首先创建一个带有列表框的窗口,如下所示: hDlg = CreateWindowExA( WS_EX_CLIENTEDGE, "ListBox", "The title of my window", WS_OVERLAPPEDWINDOW, CW_
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\u LISTBOX\u示例
抛出一个编译错误,因为它没有包含在任何地方。就我个人而言,我无法用谷歌搜索第二个参数int-nIDDlgItem
的正确结果
有人能告诉我如何从
CreateWindowExA()
中找到值GetDlgItem()
,或者找到列表框的句柄吗?问题是,您使用预定义的listbox
窗口类来创建顶级窗口
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...
这是在创建listbox控件。CreateWindowEx
的第二个参数指定窗口类-这告诉系统要创建的窗口类型。由于您正在为该值传递“ListBox”
,因此它将创建ListBox
类的实例
问题是您正在将该窗口创建为顶级窗口WS_OVERLAPPEDWINDOW
是用于顶级窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口样式)。子窗口(如listbox控件)需要设置WS\u Child
样式
您真正需要做的是使用
RegisterClass
为顶级窗口注册您自己的窗口类。调用CreateWindowEx
创建主窗口时,您可以使用此类名,然后将各种控件创建为该窗口的子窗口。问题在于,您使用预定义的列表框
窗口类来创建顶级窗口
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...
这是在创建listbox控件。CreateWindowEx
的第二个参数指定窗口类-这告诉系统要创建的窗口类型。由于您正在为该值传递“ListBox”
,因此它将创建ListBox
类的实例
问题是您正在将该窗口创建为顶级窗口WS_OVERLAPPEDWINDOW
是用于顶级窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口样式)。子窗口(如listbox控件)需要设置WS\u Child
样式
您真正需要做的是使用
RegisterClass
为顶级窗口注册您自己的窗口类。调用CreateWindowEx
创建主窗口时,您可以使用此类名,然后将各种控件创建为该窗口的子窗口。问题在于,您使用预定义的列表框
窗口类来创建顶级窗口
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...
这是在创建listbox控件。CreateWindowEx
的第二个参数指定窗口类-这告诉系统要创建的窗口类型。由于您正在为该值传递“ListBox”
,因此它将创建ListBox
类的实例
问题是您正在将该窗口创建为顶级窗口WS_OVERLAPPEDWINDOW
是用于顶级窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口样式)。子窗口(如listbox控件)需要设置WS\u Child
样式
您真正需要做的是使用
RegisterClass
为顶级窗口注册您自己的窗口类。调用CreateWindowEx
创建主窗口时,您可以使用此类名,然后将各种控件创建为该窗口的子窗口。问题在于,您使用预定义的列表框
窗口类来创建顶级窗口
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...
这是在创建listbox控件。CreateWindowEx
的第二个参数指定窗口类-这告诉系统要创建的窗口类型。由于您正在为该值传递“ListBox”
,因此它将创建ListBox
类的实例
问题是您正在将该窗口创建为顶级窗口WS_OVERLAPPEDWINDOW
是用于顶级窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口样式)。子窗口(如listbox控件)需要设置WS\u Child
样式
您真正需要做的是使用
RegisterClass
为顶级窗口注册您自己的窗口类。调用CreateWindowEx
创建主窗口时,您可以使用此类名,然后创建各种控件作为该窗口的子窗口。我了解注册一个类并使用该类创建窗口。但是如何在该窗口中创建子控件呢?每个控件都需要单独创建,方法是将适当的类名传递给CreateWindowEx
,并确保设置了WS_child
样式。或者使用一个对话框,系统会帮你完成所有的事情。顺便说一句,这是非常基本的Windows 101的东西,你可能想尝试一本书来入门-Petzold one通常是初学者的金标准。谢谢。我的老板让我使用我非常不熟悉的WINAPI(linux背景)创建一个小型GUI。所以我试着跟随MSDN的文章,但他们似乎比我知道的要多一些