我填写LOGFONT
结构并使用CreateFontIndirect()
创建字体并用它绘制一段文字。这是在Windows 7上,所以我们不要讨论高动态DPI感知或其在Windows 10上调用的任何内容。
将控制面板设置为100%默认缩放系数,我绘制的文字看起来很像。如果将控制面板缩放系数更改为125%或150%,会发生什么?我曾经期望在重新绘制/重新登录/重启之后绘制的文本看起来会稍微大一点,而我不必在程序上做任何事情。但事实并非如此。无论缩放因子大小如何,文本都保持完全相同。我做错了什么?
我的字体高度已硬编码为-7
。
我猜这同样适用于按钮尺寸。如果我在运行中以程序方式计算按钮大小,并且按钮在100%时看起来没问题,我是否应该在以125%显示它们时进行额外的计算?它们看起来完全一样。
答案 0 :(得分:1)
对负值进行硬编码可以得到:
字体映射器将此值转换为设备单位和匹配项 它的绝对值与可用的字符高度有关 字体。
如果你查看CreateFont
的文档,你会发现这个公式
nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);
和LOGPIXELSY基本上得到DPI,一英寸包含72点。如果您需要特定的字体磅值,则应使用此公式。
这是经典的做事方式,并且一直存在。在Vista之前,点大小通常为8,但您应该从系统/主题API获取它。在支持文章中也有documented here,其中包含更多详细信息。您还可以通过询问NONCLIENTMETRICS来获取系统使用的LOGFONT
。
This blog post包含有关Microsoft必须采取哪些操作来修复记事本才能使每个监视器支持DPI的信息。
对话框中的UI元素应基于对话框单元。对话框单位因字体而异,但可以转换为MapDialogRect
的像素。