1

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

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

然而,情况并非如此。打开的下拉菜单的垂直大小如何被限制?

4

2 回答 2

1

你可以使用-CComboBox::SetMinVisibleItems(int);

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

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

于 2013-10-22T02:51:30.047 回答
1

设置组合框的大小及其下拉列表中概述的步骤仅在您将No Integral Height属性设置为True或创建具有CBS_NOINTEGRALHEIGHT样式的组合框时才具有所需的效果。不幸的是,这通常会导致部分显示项目,因为高度以显示单位指定。

要在不部分裁剪项目的情况下获得组合框下拉部分的所需高度,您必须在运行时通过调用CComboBox::SetMinVisibleItems或发送CB_SETMINVISIBLE消息来设置它。这两者是相同的,前者使用 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='*'\"")
于 2013-10-22T13:45:46.187 回答