gpt4 book ai didi

windows - MFC CheckBox - 检索准确的正方形大小

转载 作者:行者123 更新时间:2023-12-03 23:39:18 25 4
gpt4 key购买 nike

问题已讨论here ,但人们接受了不准确的解决方案。我正在使用 CButton类与 BS_AUTOCHECKBOX旗帜。有没有一种精确的方法来确定 Windows/MFC 上带有黑色边框(带有复选标记)的正方形的大小?还有这个方块和文字之间的差距?
enter image description here
我意识到,差距可以这样计算(scale_factor 取决于客户端的当前屏幕 DPI - 100%dpi, scale_factor==1; 150%dpi, scale_factor==1.5 等)

std::ceil(3 * scale_factor)
我需要我的解决方案根据客户端的屏幕分辨率/DPI 设置返回真实大小。 Windows 在 100% DPI 上创建这个正方形 13x13px,在 125% DPI 上创建 16x16px,但在 150% 和 175% DPI 上创建 20x20px!因此,不可能只用 scale_factor 乘以 13。 .
这段代码
int x = GetSystemMetrics(SM_CXMENUCHECK);
int y = GetSystemMetrics(SM_CYMENUCHECK);
在 100% DPI 上返回 15px,在 125% DPI 上返回 19px,如果我减去
int xInner = GetSystemMetrics( SM_CXEDGE );
int yInner = GetSystemMetrics( SM_CYEDGE );
它返回 2px(在每个 DPI 设置 (???) 上),我在 100% dpi 上得到 13px,但在 125% DPI 上得到 17px(它应该是 16)并且错误只会随着 DPI 的升高而变大。问题在于 SM_CXMENUCHECK不代表标准 CButton复选框。
我想避免自定义绘图。有没有办法用像素精度来做到这一点(如果没有,你想出的最好的解决方案是什么)?提前谢谢了。
编辑:
只是为了澄清,我需要一个函数(或一些算法)在 100% 缩放时返回 13px,在 125% 时返回 16px,在 150% 和 175% 时返回 20px(以及任何其他可能的缩放)。这意味着我需要复选框的真实大小(由 Windows 根据当前在客户端屏幕上设置的分辨率绘制)。

最佳答案

您可以使用 GetThemePartSize 功能。
还有一些代码:

HTHEME hTheme = ::OpenThemeData(hwnd, L"button");
SIZE szCheckBox;
HRESULT hr = GetThemePartSize(hTheme, NULL, BP_CHECKBOX, CBS_UNCHECKEDNORMAL, NULL, TS_TRUE, &szCheckBox);
编辑:
相关回答: Determine checkbox square size [MFC]

关于windows - MFC CheckBox - 检索准确的正方形大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66903530/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com