当前位置:  开发笔记 > 开发工具 > 正文

默认按钮大小?

如何解决《默认按钮大小?》经验,为你挑选了2个好方法。

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

备注:使用USE_CW_DEFAULT宽度和高度会产生一个0,0大小的按钮,因此这不是解决方案.

Timbo.. 8

这就是MSDN所说的:设计规范和指南 - 可视化设计:布局.

按钮的默认大小为50x14 DLU,可以使用GetDialogBaseUnits显示的示例计算像素.

该MapDialogRect功能似乎做计算你.



1> Timbo..:

这就是MSDN所说的:设计规范和指南 - 可视化设计:布局.

按钮的默认大小为50x14 DLU,可以使用GetDialogBaseUnits显示的示例计算像素.

该MapDialogRect功能似乎做计算你.


如果您的窗口不是一个对话框,MapDialogRect没有帮助,但手动计算效果很好.

2> macbirdie..:

在完美,无忧无虑的世界......

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

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()功能文档备注.


没有什么是完美的

正如Anders所指出的那样,这些指标基于系统字体.如果你的窗口使用了一个shell对话框字体,或者只是任何不会让你的眼睛流血的东西,那么你几乎都是自己的.

要想让自己的"对话"的基本单位,你必须与检索当前的文本度量GetTextMetrics()和使用字符的高度和平均宽度(tmHeighttmAveCharWidth在中TEXTMETRIC通过自己的结构分别)和翻译它们与MulDiv,除非你是在一个对话框,然后MapDialogRect()将为你做所有的工作.

请注意,tmAveCharWidth仅近似实际的平均字符宽度,因此建议使用GetTextExtentPoint32()字母字符集上的函数.

看到:

如何根据Visual C++中的当前字体计算对话框单位

如何使用非基于系统的字体计算对话基本单位


更简单的选择

如果按钮是您想要自动调整大小的唯一控件,您还可以使用BCM_GETIDEALSIZE消息Button_GetIdealSize()宏(仅适用于Windows XP及更高版本)来检索适合按钮所包含内容的最佳宽度和高度,尽管它看起来非常丑陋而没有在按钮周围应用任何边距文本.


在一个更完美的世界中,2009年的GUI布局根本不涉及像素坐标.:)动态布局管理器在大多数情况下是更好的解决方案,imo.
推荐阅读
刘美娥94662
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有