首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从窗口句柄获取ListBox句柄

从窗口句柄获取ListBox句柄
EN

Stack Overflow用户
提问于 2014-03-05 19:39:15
回答 1查看 1.6K关注 0票数 0

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

我首先创建一个具有如下列表框的窗口:

代码语言:javascript
复制
hDlg = CreateWindowExA(
        WS_EX_CLIENTEDGE,
        "ListBox",
        "The title of my window",
        WS_OVERLAPPEDWINDOW,
        CW_USEDEFAULT, CW_USEDEFAULT, 240, 120,
        NULL, NULL, hInstance, NULL);

但据我所知,hDlg现在指向整个窗口,而不是列表框。

理想情况下,我希望能够向列表框中添加类似于以下内容的项:

代码语言:javascript
复制
int pos = (int)SendMessage(hwndList, LB_ADDSTRING, 0, 
                    (LPARAM) "Test Item1"); 

但是,我无法以与教程相同的方式获得列表的句柄,因为它们使用以下行:

代码语言:javascript
复制
HWND hwndList = GetDlgItem(hDlg, IDC_LISTBOX_EXAMPLE);  

但是IDC_LISTBOX_EXAMPLE抛出一个编译错误,因为它没有包含在任何地方。对于我的生活,我不能谷歌一个正确的结果第二个参数int nIDDlgItem

请有人向我解释一下,我是如何找到值GetDlgItem()的,还是从CreateWindowExA()找到我的列表框的句柄?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-03-05 19:52:34

问题在于您正在使用预定义的ListBox窗口类来创建顶级窗口。

代码语言:javascript
复制
hDlg = CreateWindowExA(WS_EX_CLIENTEDGE, "ListBox", ...

这将创建一个listbox控件。CreateWindowEx的第二个参数指定了window类--这告诉系统要创建哪种类型的窗口。因为您要为该值传递"ListBox",所以它将创建ListBox类的一个实例。

问题是你正在创建这个窗口成为一个顶级的窗口。WS_OVERLAPPEDWINDOW是用于顶层窗口的窗口样式(即上面屏幕截图中标题为“列表框示例”的窗口)。子窗口(如listbox控件)需要设置WS_CHILD样式。

您真正需要做的是使用RegisterClass为顶级窗口注册您自己的窗口类。在调用CreateWindowEx创建主窗口时,您将使用这个类名,然后创建各种控件作为该窗口的子控件。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/22207539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档