我不习惯CreateFontA
,但是我正在为使用此功能的游戏制作mod,我也必须使用它。
我设法更改了字体,但是在更改字体大小时遇到了一些麻烦。
我要使用11px的字体,如何实现?我尝试只将width和height设置为11,但是这太糟糕了。
答案 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