所有者的垂直大小绘制比非所有者绘制组合框大的组合框

时间:2017-10-11 10:48:53

标签: winapi combobox mfc

我有一个对话框,其中包含两个组合框,一个所有者绘图和一个非所有者绘图。

这是在.rc文件中定义它们的方式:

if (scope.init.value) {
    elem.css('display', 'none');
    scope.init = false;
}

它们在.rc文件中具有完全相同的高度,但是所有者绘制一个(左侧的那个)略高于非所有者绘制的一个:

enter image description here

2 个答案:

答案 0 :(得分:4)

首先,资源中的给定高度是处于下拉状态的组合框的高度。

此行为是由 设计。我认为组合框项目高度的大小由...决定 分配给控件的字体的字体高度。 使用所有者绘制组合框,系统不知道所以它发送给你一个 WM_MEASUREITEM使用组合框的默认大小初始化(可能是 取决于系统字体而不是gui字体。)

所以你需要在父对话框中处理WM_MEASUREITEM ......

这样的事情可能有所帮助(代码未针对编译器进行验证):

$ wget https://chromedriver.storage.googleapis.com/2.40/chromedriver_linux64.zip
$ unzip chromedriver_linux64.zip
$ chromedriver --version
ChromeDriver 2.40.565383

答案 1 :(得分:3)

在处理大小和布局时,组合框是在Windows中使用的最可怕的控件。因为它还支持“简单”样式,单独编辑和列表框控件始终可见,它不使用标准窗口边框/边缘样式,而是在需要时绘制边框。

创建控件时指定的高度实际上是下拉状态中使用的大小。它根据字体在运行时强制编辑控件的大小。因为有这么多人弄错了主题的ComCtl32 v6实现确保即使你最初给它一个小尺寸,下拉大小也是合理的。

要匹配系统,您需要尝试在WM_MEASUREITEM中计算所需的大小,但默认控件的确切布局当然没有记录。它可能是字体的高度+ SM_C * EDGE的系统度量大小,可能还有一些填充。

如果您只需要文本旁边的图标,则可以使用ComboBoxEx控件。

相关问题