WinAPI ComboBox 不显示下拉列表
Posted
技术标签:
【中文标题】WinAPI ComboBox 不显示下拉列表【英文标题】:WinAPI ComboBox shows no dropdown list 【发布时间】:2015-04-27 19:49:37 【问题描述】:当我按下箭头按钮时,ComboBox 控件如何不显示下拉列表?准确地说,它“试图”显示一些东西,但它看起来在屏幕上没有足够的空间,所以只显示了一条细线(就像它是一个“带有零项的列表框”)。当我使用向上和向下箭头时,我可以遍历 ComboBox 中的可用选项。这张图片演示了(注意 ComboBox 下方的黑线,它刚刚作为对我尝试显示下拉列表的响应而出现)http://nestorovic.hyperlink.cz/comboBoxProblem.PNG。 可能是列表框试图适应的 ComboBox 周围有一个边界矩形?如何增加这样的矩形?感谢您的回复!
【问题讨论】:
Combo Box的裁剪区域可以通过资源脚本中的height参数来设置。如果Combo Box是动态创建的,可以通过SetWindowPos等API进行设置。 您好,感谢您提供的信息。我目前正在将 VS Express(缺少资源编辑器)与旧版 VS6 Pro(其资源编辑器缺少高度参数修改)结合使用。无论如何,在我迁移到更新版本的 VS 之前,我会记住你的提示 :-) 您可以手动编辑 .rc 文件。有关 COMBOBOX 定义的文档,请参阅 COMBOBOX control。 P.S.:在 Visual Studio 6 中,您可以通过首先单击下拉按钮来更改资源编辑器中组合框的高度。这将显示一个包含整个控件的框架,并允许您调整它的大小。 非常感谢!隐藏在箭头按钮下,这几乎看起来像一个“复活节彩蛋”,而不是开发人员的预期行为! :-) 【参考方案1】:我对组合框有同样的问题。对我来说解决方案很简单。您只需要使按钮高度更高。当我将按钮高度设为 25 时,只有黑色细线。但是当我将高度设为 200 时,我的所有列表都出现在按钮按下时。
HWND hwndChannelList = CreateWindow(
L"COMBOBOX", // Predefined class; Unicode assumed
L"", // Button text
WS_VISIBLE | WS_CHILD | CBS_DROPDOWNLIST | BS_DEFSPLITBUTTON | CBS_DROPDOWN | CBS_HASSTRINGS | WS_VSCROLL, // Styles WS_VSCROLL | BS_DEFSPLITBUTTON WS_DISABLED |
10, // x position
80, // y position
100, // Button width
200, // Button height
hWnd, // Parent window
(HMENU)IDC_CHANNEL_COUT_BUTTON, //menu.
(HINSTANCE)GetWindowLong(hWnd, GWL_HINSTANCE),
NULL);
【讨论】:
【参考方案2】:知道了!确实有一个边界矩形,我必须使用 GetClientRect 和 SetWindowPos 函数来增加它,http://nestorovic.hyperlink.cz/comboBoxSolved.PNG。
【讨论】:
额外阅读:Why does the size of a combo box include the size of the drop-down?以上是关于WinAPI ComboBox 不显示下拉列表的主要内容,如果未能解决你的问题,请参考以下文章
ComboBox ItemTemplate 仅在下拉列表中工作