如何使用CreateFontA设置字体大小?

时间:2018-08-29 20:39:00

标签: c++ winapi gdi

我不习惯CreateFontA,但是我正在为使用此功能的游戏制作mod,我也必须使用它。

我设法更改了字体,但是在更改字体大小时遇到​​了一些麻烦。

我要使用11px的字体,如何实现?我尝试只将width和height设置为11,但是这太糟糕了。

1 个答案:

答案 0 :(得分:2)

答案是(或者至少是)微不足道的。

首先,您可以选择两种不同的高度:字符本身的高度,或“正常”字符所处的单元格的高度(例如,带有{{1 }}通常会延伸到储存格之外)。因此,对于相同大小的字体,字符单元通常将略大于字符本身的大小。

要根据字符 cell 的高度选择字体,请传递一个正数作为高度。要根据字符本身的高度进行选择,请传递一个负数(其绝对值将用作高度)。

因此,假设您希望字符自己高11点(因此我们需要为高度传递一个负数),并且您希望宽度为默认值用于手头的字体。我们还假设您正在处理MM_TEXT模式,其中逻辑单位等于一个像素。

Windows使用该术语时,一个点是一英寸的1/72 nd (请注意:英寸的72点不是通用的,例如,某些点是英寸的72.72点相反,如果您需要遵守“点”的其他定义,请随意修改以下代码。

因此,要计算尺寸,我们可以从屏幕上垂直获取每英寸的像素数开始,然后为正确的点数计算像素数:

y

[Microsoft具有static const int points_per_inch = 72; int pixels_per_inch = GetDeviceCaps(hDC, LOGPIXELSY); int pixels_height = - (points * pixels_per_inch / points_per_inch); 函数以确保在计算中不会出现中间值溢出,但是除非您使用的是16位计算机或真正巨大的字体,否则这通常是解决问题的解决方案。]

由于我们需要默认宽度,因此我们将传递0作为宽度。

所以,我们最终得到这样的东西:

MulDiv