我使用 VS2010 创建了一个非常简单的基于对话框的 MFC 应用程序,试图找到解决我们遇到的问题的方法。我已经从工具箱中将一个组合框拖放到对话框中,并修改了OnInitDialog
方法以向其中添加一大堆项目。
我想限制打开组合框的垂直大小。似乎使用设计器执行此操作的方法是单击组合框控件的下拉箭头,它会切换可用于调整控件大小的手柄种类,并允许设置高度。这个高度确实会影响关闭的组合框的大小,但应该控制打开的组合框的大小。
然而,情况并非如此。打开的下拉菜单的垂直大小如何被限制?
我使用 VS2010 创建了一个非常简单的基于对话框的 MFC 应用程序,试图找到解决我们遇到的问题的方法。我已经从工具箱中将一个组合框拖放到对话框中,并修改了OnInitDialog
方法以向其中添加一大堆项目。
我想限制打开组合框的垂直大小。似乎使用设计器执行此操作的方法是单击组合框控件的下拉箭头,它会切换可用于调整控件大小的手柄种类,并允许设置高度。这个高度确实会影响关闭的组合框的大小,但应该控制打开的组合框的大小。
然而,情况并非如此。打开的下拉菜单的垂直大小如何被限制?
你可以使用-CComboBox::SetMinVisibleItems(int);
用于设置当前组合框控件下拉列表中可见项的最小数量。
通过指定下拉列表中可见项目的数量,您可以根据需要控制下拉列表的高度。
设置组合框的大小及其下拉列表中概述的步骤仅在您将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='*'\"")