无法限制 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 控件的垂直大小的主要内容,如果未能解决你的问题,请参考以下文章

ccombobox怎样设置文字垂直居中

wpf怎么把系统字库的字体大小读取到combobox

C# WinForms TextBox 等的垂直对齐

关于EasyUI ComboBox(下拉列表框)能否直接输入文本的问题,详情如图所示。

动态改变ComboBox下拉框的宽度

MFC:从控件本身的代码限制子控件的大小