这就是MSDN所说的:设计规范和指南 - 可视化设计:布局.
按钮的默认大小为50x14 DLU,可以使用GetDialogBaseUnits显示的示例计算像素.
该MapDialogRect功能似乎做计算你.
要创建标准尺寸按钮,我们必须这样做:
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);
Run Code Online (Sandbox Code Playgroud)
其中50和14分别是DLU尺寸,4和8分别是水平和垂直对话模板单元,基于GetDialogBaseUnits()
功能文档备注.
但正如Anders所指出的那样,这些指标基于系统字体.如果你的窗口使用了一个shell对话框字体,或者只是任何不会让你的眼睛流血的东西,那么你几乎都是自己的.
要想让自己的"对话"的基本单位,你必须与检索当前的文本度量GetTextMetrics()
和使用字符的高度和平均宽度(tmHeight
和tmAveCharWidth
在中TEXTMETRIC
通过自己的结构分别)和翻译它们与MulDiv,除非你是在一个对话框,然后MapDialogRect()
将为你做所有的工作.
请注意,tmAveCharWidth
仅近似实际的平均字符宽度,因此建议使用GetTextExtentPoint32()
字母字符集上的函数.
看到:
如果按钮是您想要自动调整大小的唯一控件,您还可以使用BCM_GETIDEALSIZE
消息Button_GetIdealSize()
宏(仅适用于Windows XP及更高版本)来检索适合按钮所包含内容的最佳宽度和高度,尽管它看起来非常丑陋而没有在按钮周围应用任何边距文本.