无法限制 ComboBox 控件的垂直大小
Posted
技术标签:
【中文标题】无法限制 ComboBox 控件的垂直大小【英文标题】:Cannot restrict vertical size of ComboBox control 【发布时间】:2013-10-21 14:53:28 【问题描述】:我使用 VS2010 创建了一个非常简单的基于对话框的 MFC 应用程序,试图找到解决我们遇到的问题的方法。我从工具箱中将一个组合框拖放到对话框中,并修改了OnInitDialog
方法以向其中添加一大堆项目。
我想限制 打开 组合框的垂直大小。似乎使用设计器执行此操作的方法是单击组合框控件的下拉箭头,它会切换可用于调整控件大小的手柄种类,并允许设置高度。这个高度确实会影响关闭的组合框的大小,但应该控制打开的组合框的大小。
然而,情况并非如此。打开的下拉菜单的垂直大小怎么限制?
【问题讨论】:
这对我来说很好 - 单击下拉菜单允许我选择 open 组合的大小,并且对 close 没有影响组合 - 你确定你拖的是正确的手柄吗? 可以在运行时调用CComboBox::SetMinVisibleItems
来控制下拉列表的高度。
@IInspectable - 成功了!谢谢你。将其发布为答案,我会接受。
正如@IInspectable 指出的那样,@Roger 将No Integral height
设置为true 允许它工作。不过,感谢您尝试 :)
【参考方案1】:
只有将No Integral Height
属性设置为True
或使用CBS_NOINTEGRALHEIGHT
样式创建组合框时,Setting the Size of the Combo Box and Its Drop-Down List 中概述的步骤才能达到预期效果。不幸的是,这通常会导致部分显示项目,因为高度以显示单位指定。
要获得组合框下拉部分的所需高度而不部分剪切项目,您必须在运行时通过调用CComboBox::SetMinVisibleItems
或发送CB_SETMINVISIBLE
message 来设置它。这两者是相同的,前者使用 MFC 提供的成员函数,而后者无论您是否使用 MFC 都可用。要设置可见项目的数量,应用程序必须在清单中指定 comctl32.dll 版本 6。为此,请将以下内容添加到您的应用程序清单中:
<dependency>
<dependentAssembly>
<assemblyIdentity
type="win32"
name="Microsoft.Windows.Common-Controls"
version="6.0.0.0"
processorArchitecture="*"
publicKeyToken="6595b64144ccf1df"
language="*"
/>
</dependentAssembly>
...
</dependency>
如果您使用的是 Microsoft Visual C++ 2005 或更高版本,则可以将以下编译器指令添加到源代码中,而不是手动创建清单:
#pragma comment(linker,"\"/manifestdependency:type='win32' \
name='Microsoft.Windows.Common-Controls' version='6.0.0.0' \
processorArchitecture='*' publicKeyToken='6595b64144ccf1df' language='*'\"")
【讨论】:
我很高兴你扩展了你的答案。No Integral Height
属性最终成为我们使用的解决方案。我不是实现此功能的开发人员,但他说 SetMinVisibleItems
在实际使用的 CComboBox 类上不可用。他说这与启用 ASCII 与 Unicode 的控件有关。
@Steve 无论您使用启用 ANSI 还是 UNICODE 的控件似乎都没有效果。但是,您必须使用通用控件版本 6 或更高版本。我已更新答案以包含所需的步骤。【参考方案2】:
你可以使用- CComboBox::SetMinVisibleItems(int);
用于设置当前组合框控件下拉列表中可见项的最小数量。
通过指定下拉列表中可见项目的数量,您可以根据需要控制下拉列表的高度。
【讨论】:
以上是关于无法限制 ComboBox 控件的垂直大小的主要内容,如果未能解决你的问题,请参考以下文章