无法限制ComboBox控件的垂直大小

时间:2013-10-21 14:53:29

标签: visual-c++ combobox mfc

我使用VS2010创建了一个非常简单的基于对话框的MFC应用程序,试图找到我们遇到的问题的解决方案。我从工具箱中删除了一个组合框到对话框,并修改了OnInitDialog方法,为它添加了一大堆项目。

我想限制 open 组合框的垂直尺寸。似乎使用设计器执行此操作的方法是单击组合框控件的下拉箭头,该控件可切换可用于调整控件大小的手柄类型,并允许设置高度。这个高度会影响封闭组合框的大小,但应该控制打开的组合框的大小。

但是,情况并非如此。如何限制打开的下拉列表的垂直尺寸?

2 个答案:

答案 0 :(得分:1)

你可以用 - CComboBox :: SetMinVisibleItems(INT);

用于在当前组合框控件的下拉列表中设置最小数量的可见项。

通过在下拉列表中指定可见项目的数量,您可以根据需要控制下拉列表的高度。

答案 1 :(得分:1)

如果您将No Integral Height属性设置为True或创建具有Setting the Size of the Combo Box and Its Drop-Down List样式的组合框,则CBS_NOINTEGRALHEIGHT中列出的步骤只会产生预期的效果。不幸的是,这通常导致部分显示的项目,因为高度以显示单位指定。

要获得组合框下拉部分的所需高度而不部分剪切项目,您必须通过调用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='*'\"")