gpt4 book ai didi

winapi - 默认按钮大小?

转载 作者:行者123 更新时间:2023-12-03 00:43:41 24 4
gpt4 key购买 nike

如何创建一个具有与其余部分一致的标准系统范围尺寸(尤其是高度)的按钮控件(使用 BUTTON 窗口类的 CreateWindow) Windows 应用程序?我当然应该考虑 DPI 以及可能的其他设置。

Remark: Using USE_CW_DEFAULT for width and height results in a 0, 0 size button, so that's not a solution.

最佳答案

在完美、无忧的世界中......

要创建标准尺寸的按钮,我们必须这样做:

LONG units = GetDialogBaseUnits();
m_hButton = CreateWindow(TEXT("BUTTON"), TEXT("Close"),
WS_VISIBLE | WS_CHILD | BS_DEFPUSHBUTTON,
0, 0, MulDiv(LOWORD(units), 50, 4), MulDiv(HIWORD(units), 14, 8),
hwnd, NULL, hInst, NULL);

其中 5014 分别是 DLU 尺寸,48 是水平和垂直对话框模板单位分别基于GetDialogBaseUnits() function文档备注。

<小时/>

没有什么是完美的

但是正如 Anders 指出的那样,这些指标基于系统字体。如果您的窗口使用 shell 对话框字体或任何不会让您流血的字体,那么您就只能靠自己了。

要获得自己的“对话框”基本单位,您必须使用 GetTextMetrics() 检索当前文本指标,并使用字符高度和平均宽度(tmHeight >tmAveCharWidth 分别为 TEXTMETRIC 结构),并使用 MulDiv 自行翻译它们,除非您位于对话框中,然后使用 MapDialogRect() 将为您完成所有工作。

请注意,tmAveCharWidth 仅近似实际的平均字符宽度,因此建议使用 GetTextExtentPoint32()而是在字母字符集上运行。

参见:

<小时/>

更简单的替代方案

如果按钮是您想要自动调整大小的唯一控件,您还可以使用 BCM_GETIDEALSIZE留言Button_GetIdealSize()宏(仅限 Windows XP 及更高版本)来检索适合按钮包含的任何内容的最佳宽度和高度,尽管在按钮文本周围没有应用任何边距的情况下它看起来相当难看。

关于winapi - 默认按钮大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58620/

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