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 不显示下拉列表的主要内容,如果未能解决你的问题,请参考以下文章

WINAPI - 设置组合框下拉菜单的背景和文本颜色

delphi combobox 如何隐藏下拉列表

C# 学习笔记(16)ComboBox下拉列表框宽度自适应

ComboBox ItemTemplate 仅在下拉列表中工作

VB大神赐教!怎么让下拉列表combobox只能选择不能写入其他值?

ComboBox将工作表名称加载到下拉列表中