如何使用 CreateFontA 设置字体大小? [关闭]

Posted

技术标签:

【中文标题】如何使用 CreateFontA 设置字体大小? [关闭]【英文标题】:How to set font size using CreateFontA? [closed] 【发布时间】:2018-08-29 20:38:59 【问题描述】:

我不习惯CreateFontA,但是我正在为一个使用这个功能的游戏做一个mod,我也必须使用它。

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

我想使用 11px 的字体大小,我该如何实现呢?我尝试将宽度和高度设置为 11,但出现了严重错误。

【问题讨论】:

标准 C++ 语言没有字体创建工具;它取决于操作系统或平台。请使用您正在使用的 GUI 框架或操作系统编辑您的帖子。 另外,使用minimal reproducible example 编辑您的帖子,您可以在其中创建和使用字体。 CreateFontA 是一个 Win32 函数。 来吧,伙计们,这是一个不错的问题。我试图回答并意识到我忘记了该怎么做。 首先阅读documentation。高度和宽度以逻辑单位而非像素表示。您必须自己计算单位。文档告诉你怎么做。 【参考方案1】:

答案是(或至少可以)有些不平凡。

首先,您可以选择两种不同的高度:字符本身的高度,或“正常”字符所在的单元格的高度(例如,带有降序的字母,如y通常会延伸到细胞外)。所以,同样大小的字体,字符单元格通常会比字符本身的大小略大。

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

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

由于 Windows 使用该术语,一点是 1/72nd 英寸(注意:72 磅到 1 英寸并不是通用的 - 例如,有些使用 72.72 磅到英寸相反——如果您需要遵守“点”的不同定义,请随意修改以下代码)。

因此,要计算尺寸,我们可以先检索屏幕上每英寸(垂直)的像素数,然后计算正确点数的像素数:

static const int points_per_inch = 72;
int pixels_per_inch = GetDeviceCaps(hDC, LOGPIXELSY);
int pixels_height = - (points * pixels_per_inch / points_per_inch);

[Microsoft 有一个 MulDiv 函数来确保在计算中不会出现中间值溢出,但除非您使用 16 位机器或真正巨大的字体,否则这主要是寻找问题的解决方案。]

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

所以,我们最终会得到这样的结果:

HFONT font = CreateFont(pixels_height, 0, // size
                        0, 0, 0, // normal orientation
                        FW_NORMAL,   // normal weight--e.g., bold would be FW_BOLD
                        false, false, false, // not italic, underlined or strike out
                        DEFAULT_CHARSET,
                        OUT_OUTLINE_PRECIS, // select only outline (not bitmap) fonts
                        CLIP_DEFAULT_PRECIS,
                        CLEARTYPE_QUALITY,
                        VARIABLE_PITCH | FF_SWISS,
                        "Arial");

【讨论】:

另见DPI and Device-Independent Pixels,了解不同屏幕分辨率下单位和像素的详细说明(72 PPI 并非唯一可能) 您正在考虑每英寸 96 像素的传统值,而不是每英寸 72 点。前者有所不同,但由于 MS 使用的术语后者没有。

以上是关于如何使用 CreateFontA 设置字体大小? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

安卓手机字体大小调整破解教程

如何设置Microsoft Visual Studio的字体大小

如何使用 CSS 忽略手机的字体大小设置?

如何根据容器大小设置字体大小? [复制]

SWT中Label字体的大小如何设置

如何使用 Xcode Storyboard 为不同的设备设置不同的字体大小?