Winapi 如何使用dropdownlist而不是ownerdraw样式更改组合框控件的外观高度?

Winapi 如何使用dropdownlist而不是ownerdraw样式更改组合框控件的外观高度?,winapi,combobox,Winapi,Combobox,背景:在某个对话框中,一行中有几个控件。我希望它们都具有相同的表观高度。然而,对于一个带有CBS_DROPDOWNLIST样式且没有CBS_OWNERDRAW*的组合框,我很难改变表观高度 问题:如何更改这种下拉列表组合框的外观高度 我知道组合框不允许使用SetWindowPos更改高度。然而,我的印象是,发送wParam=-1的CB_SETITEMHEIGHT消息应该修改高度。这种方法确实适用于CBS_OWNERDRAWFIXED样式集的组合框(虽然我想避免设置这种样式以保留“类似按钮”的外观

背景:在某个对话框中,一行中有几个控件。我希望它们都具有相同的表观高度。然而,对于一个带有CBS_DROPDOWNLIST样式且没有CBS_OWNERDRAW*的组合框,我很难改变表观高度

问题:如何更改这种下拉列表组合框的外观高度

我知道组合框不允许使用SetWindowPos更改高度。然而,我的印象是,发送wParam=-1的CB_SETITEMHEIGHT消息应该修改高度。这种方法确实适用于CBS_OWNERDRAWFIXED样式集的组合框(虽然我想避免设置这种样式以保留“类似按钮”的外观)


环境:我的Win32应用程序使用Common Controls 6.0,我担心在启用视觉样式的环境中(Windows 7,Aero)的外观。

我认为这是不可能的

正如您所提到的,
SetWindowPos
MoveWindow
都不能像您期望的那样工作。那是因为。控件根据其使用的字体大小自动调整自身大小。因此,要更改大小,请通过发送消息来更改控件字体的大小


但我不明白为什么这是个问题。您说希望一系列控件具有相同的高度,但除非您更改其他控件的高度,否则它们应该已经匹配。由于对话框上的所有控件通常使用相同的字体,因此组合框和文本框的高度应该已经相同。当您使用v6的常用控件并启用视觉样式时,它们将应用于所有这些控件,并且它们应有统一的外观。您不必手动调整高度。

请尝试“否”,正如SetWindowPos、MoveWindow不会影响外观高度一样。作为一种解决方法,我切换到使用带有拆分样式BCSS_NOSPLIT和弹出菜单的拆分按钮。通过这种方式,我在键入项目名称时松开了内置的自动选择,但在我的用例中,稍微降低的键盘可访问性似乎是可以接受的。我仍然对这个问题的答案感兴趣。这个问题特别针对组合框旁边的按钮,因为按钮的大小取决于CreateWindow的参数(或者对话框资源中的DLU)。不过我还没有尝试过BCM_GETIDEALSIZE。@DanielFlassig如果你现在还没有,BCM_GETIDEALSIZE非常适合size@CodyGray好吧,我知道这是复活死者,但在过去的4周左右的时间里,我看到一些人这样说视觉风格,这让我完全困惑:仅仅拥有一个清单并调用
InitCommonControlsEx()
是否会自动将正确的字体应用于控件?因为根据我的经验,它不是,但其他人似乎都认为它是?。。。再次为复活感到抱歉,但我现在真的很困惑:S(FWIW我发现这个答案是为了寻找一种方法来获得一个无主题的组合框在布局时的高度;GetComboBoxInfo()可能是我唯一的选择)不,它不是,@andlabs。从来没有。我不知道是谁在声称,但他们是不正确的。对于您创建的控件(例如,通过调用CreateWindow),您必须手动设置所需的字体,否则会得到令人讨厌的16位Windows系统字体。对于对话框,您可以设置一组标志(我完全忘记了它们是什么,我懒得查找它们,类似于DS_SYSFONT)并自动设置字体,但在Vista和更高版本上,这仍然不是正确的字体,因为默认字体更改为Segoe UI。请参阅,是的,@andlabs,
GetComboBoxInfo()
是我将使用的。至少,这是我的第一本能。你为什么在事后猜测这个选择?