VS2019 MFC CreateFontW 创建字体函数详细解读

这篇具有很好参考价值的文章主要介绍了VS2019 MFC CreateFontW 创建字体函数详细解读。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

CreateFontW 函数 (wingdi.h)

  • 项目
  • 2022/09/28
  • 4 个参与者

反馈

CreateFont 函数创建具有指定特征的逻辑字体。 随后可将逻辑字体选为任何设备的字体。

语法

C++复制

HFONT CreateFontW(
  [in] int     cHeight,
  [in] int     cWidth,
  [in] int     cEscapement,
  [in] int     cOrientation,
  [in] int     cWeight,
  [in] DWORD   bItalic,
  [in] DWORD   bUnderline,
  [in] DWORD   bStrikeOut,
  [in] DWORD   iCharSet,
  [in] DWORD   iOutPrecision,
  [in] DWORD   iClipPrecision,
  [in] DWORD   iQuality,
  [in] DWORD   iPitchAndFamily,
  [in] LPCWSTR pszFaceName
);

参数

[in] cHeight

字体字符单元格或字符的高度(以逻辑单位为单位)。 字符高度值 (也称为 em 高度) 是字符单元格高度值减去内部前导值。 字体映射器按以下方式解释 nHeight 中指定的值。

Value 含义

> 0

字体映射器将此值转换为设备单位,并将其与可用字体的单元格高度匹配。

0

字体映射器在搜索匹配项时使用默认高度值。

< 0

字体映射器将此值转换为设备单位,并将其绝对值与可用字体的字符高度匹配。

 

对于所有高度比较,字体映射器查找不超过所请求大小的最大字体。

首次使用字体时,会发生此映射。

对于MM_TEXT映射模式,可以使用以下公式为具有指定点大小的字体指定高度:

C++复制


nHeight = -MulDiv(PointSize, GetDeviceCaps(hDC, LOGPIXELSY), 72);

[in] cWidth

请求字体中字符的平均宽度(以逻辑单位为单位)。 如果此值为零,则字体映射器选择最接近的匹配值。 最近的匹配值是通过比较当前设备的纵横比与可用字体数字化纵横比之间的差异的绝对值来确定的。

[in] cEscapement

转义向量与设备的 x 轴之间的角度(以十分之几度为单位)。 转义向量与文本行的基线并行。

当图形模式设置为GM_ADVANCED时,可以指定字符串的转义角度,而独立于字符串字符的方向角度。

当图形模式设置为GM_COMPATIBLE时, nEscapement 指定转义和方向。 应将 nEscapement 和 nOrientation 设置为相同的值。

[in] cOrientation

每个字符的基线与设备的 x 轴之间的角度(以十分之几度为单位)。

[in] cWeight

0 到 1000 范围内的字体粗细。 例如,400 是正常的,700 是粗体。 如果此值为零,则使用默认权重。

为方便起见,定义了以下值。

重量

FW_DONTCARE

0

FW_THIN

100

FW_EXTRALIGHT

200

FW_ULTRALIGHT

200

FW_LIGHT

300

FW_NORMAL

400

FW_REGULAR

400

FW_MEDIUM

500

FW_SEMIBOLD

600

FW_DEMIBOLD

600

FW_BOLD

700

FW_EXTRABOLD

800

FW_ULTRABOLD

800

FW_HEAVY

900

FW_BLACK

900

[in] bItalic

如果设置为 TRUE,则指定斜体字体。

[in] bUnderline

如果设置为 TRUE,则指定带下划线的字体。

[in] bStrikeOut

如果设置为 TRUE,则为删除线字体。

[in] iCharSet

字符集。 以下值是预定义的:

  • ANSI_CHARSET
  • BALTIC_CHARSET
  • CHINESEBIG5_CHARSET
  • DEFAULT_CHARSET
  • EASTEUROPE_CHARSET
  • GB2312_CHARSET
  • GREEK_CHARSET
  • HANGUL_CHARSET
  • MAC_CHARSET
  • OEM_CHARSET
  • RUSSIAN_CHARSET
  • SHIFTJIS_CHARSET
  • SYMBOL_CHARSET
  • TURKISH_CHARSET
  • VIETNAMESE_CHARSET

Windows 的朝鲜语版本:

  • JOHAB_CHARSET

中东语言版本的 Windows:

  • ARABIC_CHARSET
  • HEBREW_CHARSET

Windows 的泰国语言版本:

  • THAI_CHARSET

OEM_CHARSET值指定依赖于操作系统的字符集。

DEFAULT_CHARSET设置为基于当前系统区域设置的值。 例如,当系统区域设置为英语 (美国) 时,系统会将其设置为ANSI_CHARSET。

操作系统中可能存在具有其他字符集的字体。 如果应用程序使用具有未知字符集的字体,则不应尝试翻译或解释使用该字体呈现的字符串。

若要确保创建字体时的结果一致,请不要指定OEM_CHARSET或DEFAULT_CHARSET。 如果在 lpszFace 参数中指定字面名称,请确保 fdwCharSet 值与 lpszFace 中指定的字样字符集匹配。

[in] iOutPrecision

输出精度。 输出精度定义输出必须与所请求字体的高度、宽度、字符方向、转义、音调、音调和字体类型相匹配。 可以是下列值之一。

含义

OUT_CHARACTER_PRECIS

未使用。

OUT_DEFAULT_PRECIS

默认字体映射器行为。

OUT_DEVICE_PRECIS

当系统包含具有相同名称的多个字体时,指示字体映射器选择设备字体。

OUT_OUTLINE_PRECIS

此值指示字体映射器从 TrueType 和其他基于大纲的字体中进行选择。

OUT_PS_ONLY_PRECIS

指示字体映射器仅从 PostScript 字体中进行选择。 如果系统中未安装 PostScript 字体,则字体映射器将返回到默认行为。

OUT_RASTER_PRECIS

当系统包含具有相同名称的多个字体时,指示字体映射器选择光栅字体。

OUT_STRING_PRECIS

字体映射器不使用此值,但在枚举光栅字体时返回该值。

OUT_STROKE_PRECIS

字体映射器不使用此值,但在枚举 TrueType、其他基于大纲的字体和矢量字体时返回该值。

OUT_TT_ONLY_PRECIS

指示字体映射器仅从 TrueType 字体中进行选择。 如果系统中未安装 TrueType 字体,则字体映射器将返回到默认行为。

OUT_TT_PRECIS

当系统包含具有相同名称的多个字体时,指示字体映射器选择 TrueType 字体。

 

应用程序可以使用OUT_DEVICE_PRECIS、OUT_RASTER_PRECIS、OUT_TT_PRECIS和OUT_PS_ONLY_PRECIS值来控制当操作系统包含多个具有指定名称的字体时字体映射器如何选择字体。 例如,如果操作系统在光栅和 TrueType 窗体中包含名为 Symbol 的字体,则指定OUT_TT_PRECIS强制字体映射器选择 TrueType 版本。 指定OUT_TT_ONLY_PRECIS强制字体映射器选择 TrueType 字体,即使它必须替换另一个名称的 TrueType 字体。

[in] iClipPrecision

剪辑精度。 剪裁精度定义如何剪裁部分超出剪裁区域的字符。 它可以是以下一个或多个值。

Value 含义

CLIP_CHARACTER_PRECIS

未使用。

CLIP_DEFAULT_PRECIS

指定默认剪辑行为。

CLIP_DFA_DISABLE

Windows XP SP1:关闭字体的字体关联。 请注意,此标志不能保证在 Windows Server 2003 之后对任何平台产生任何影响。

CLIP_EMBEDDED

必须指定此标志才能使用嵌入的只读字体。

CLIP_LH_ANGLES

使用此值时,所有字体的旋转取决于坐标系的方向是左手还是右手。

如果未使用,设备字体始终逆时针旋转,但其他字体的旋转取决于坐标系的方向。

有关坐标系方向的详细信息,请参阅 nOrientation 参数的说明

CLIP_MASK

未使用。

CLIP_DFA_OVERRIDE

关闭字体的字体关联。 这与CLIP_DFA_DISABLE相同,但在某些情况下可能会出现问题:要使用的建议标志是CLIP_DFA_DISABLE。

CLIP_STROKE_PRECIS

字体映射器不使用,但在枚举光栅、矢量或 TrueType 字体时返回。

为了兼容,枚举字体时始终返回此值。

CLIP_TT_ALWAYS

未使用。

[in] iQuality

输出质量。 输出质量定义 GDI 必须尝试将逻辑字体属性与实际物理字体属性匹配的方式。 可以是下列值之一。

含义

ANTIALIASED_QUALITY

如果字体支持字体且字体大小不小或太大,则字体是反锯齿或平滑的。

CLEARTYPE_QUALITY

如果已设置,则尽可能使用 ClearType 抗锯齿方法) 呈现文本 (。 有关更多信息,请参见备注。

DEFAULT_QUALITY

字体的外观并不重要。

DRAFT_QUALITY

字体的外观比使用PROOF_QUALITY值时重要。 对于 GDI 光栅字体,启用缩放,这意味着可以使用更多字号,但质量可能较低。 如有必要,合成粗体、斜体、下划线和删除线字体。

NONANTIALIASED_QUALITY

字体从不抗锯齿,即字体平滑不完成。

PROOF_QUALITY

字体的字符质量比逻辑字体属性的精确匹配更重要。 对于 GDI 光栅字体,将禁用缩放,并且选择最接近大小的字体。 虽然使用PROOF_QUALITY时,所选字号可能无法精确映射,但字体质量较高,外观没有扭曲。 如有必要,合成粗体、斜体、下划线和删除线字体。

 

如果输出质量DEFAULT_QUALITY、DRAFT_QUALITY或PROOF_QUALITY,则如果SPI_GETFONTSMOOTHING系统参数为 TRUE,则字体将反锯齿。 用户可以从控制面板控制此系统参数。 (控制面板中设置的精确措辞取决于 Windows 版本,但它将是“屏幕字体平滑边缘”的效果的单词。)

[in] iPitchAndFamily

字体的音调和系列。 两个低序位指定字体间距,可以是以下值之一:

  • DEFAULT_PITCH
  • FIXED_PITCH
  • VARIABLE_PITCH

四个高阶位指定字体系列,可以是以下值之一。

Value 含义

FF_DECORATIVE

新颖的字体。 例如 Old English。

FF_DONTCARE

使用默认字体。

FF_MODERN

具有常量笔划宽度的字体,带或不带衬线。 Pica、Elite 和 Courier New 是示例。

FF_ROMAN

具有可变笔划宽度和 serifs 的字体。 例如 MS Serif。

FF_SCRIPT

设计为类似于手写的字体。 例如 Script 和 Cursive。

FF_SWISS

具有可变笔划宽度且没有 serifs 的字体。 女士?Sans Serif 是一个示例。

 

应用程序可以使用布尔 OR 运算符将音调常量与系列常量联接,为 fdwPitchAndFamily 参数指定值。

字体系列以一般方式描述字体的外观。 当请求的确切字面不可用时,它们用于指定字体。

[in] pszFaceName

指向指定字体字号的 null 终止字符串的指针。 此字符串的长度不得超过 32 个字符,包括终止 null 字符。 EnumFontFamilies 函数可用于枚举所有当前可用字体的字号名称。 有关详细信息,请参阅“备注”部分。

如果 lpszFace 为 NULL 或空字符串,GDI 将使用与其他指定属性匹配的第一个字体。

返回值

如果函数成功,则返回值是逻辑字体的句柄。

如果函数失败,则返回值为 NULL

注解

不再需要字体时,请调用 DeleteObject 函数将其删除。

为了帮助保护为 Windows 提供字体的供应商的版权,应用程序应始终报告所选字体的确切名称。 由于可用字体可能因系统而异,因此不要假定所选字体始终与所请求的字体相同。 例如,如果请求名为 Palatino 的字体,但系统上没有此类字体,则字体映射器将替换具有类似属性但不同名称的字体。 始终向用户报告所选字体的名称。

若要在 OS 的不同语言版本上获取适当的字体,请在 LOGFONT 结构中调用具有所需字体特征的 EnumFontFamiliesEx,然后使用 CreateFont 或 CreateFontIndirect 检索相应的字号名称并创建字体。

CreateFont、CreateFontIndirect 和CreateFontIndirectEx 的字体映射器可识别英语和本地化字号,而不考虑区域设置。

以下情况不支持 ClearType 反锯齿:

  • 在打印机上呈现的文本。
  • 256 种颜色或更少颜色的显示集。
  • 呈现到终端服务器客户端的文本。
  • 字体不是 TrueType 字体,也不是具有 TrueType 轮廓的 OpenType 字体。 例如,以下不支持 ClearType 反锯齿:类型 1 字体、Postscript OpenType 字体(不含 TrueType 轮廓、位图字体、矢量字体和设备字体)。
  • 字体已优化嵌入位图,仅适用于包含嵌入位图的字号。 例如,这通常发生在东亚字体中。

 

示例

C++

LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int wmId, wmEvent;
    PAINTSTRUCT ps;
    HDC hdc;
    switch (message)
    {
    
    
    case WM_PAINT:
        {
        RECT rect;
        HFONT hFontOriginal, hFont1, hFont2, hFont3;
        hdc = BeginPaint(hWnd, &ps);

            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 48 pixels in height.
            //The width, when set to 0, will cause the font mapper to choose the closest matching value.
            //The font face name will be Impact.
            hFont1 = CreateFont(48,0,0,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Impact"));
            hFontOriginal = (HFONT)SelectObject(hdc, hFont1);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100,100,700,200);
            SetTextColor(hdc, RGB(255,0,0));
            DrawText(hdc, TEXT("Drawing Text with Impact"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 20, will cause the font mapper to choose a font which, in this case, is stretched.
            //The font face name will be Times New Roman.  This time nEscapement is at -300 tenths of a degree (-30 degrees)
            hFont2 = CreateFont(36,20,-300,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,CLEARTYPE_QUALITY, VARIABLE_PITCH,TEXT("Times New Roman"));
            SelectObject(hdc,hFont2);
            
            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 100, 200, 900, 800);
            SetTextColor(hdc, RGB(0,128,0));
            DrawText(hdc, TEXT("Drawing Text with Times New Roman"), -1,&rect, DT_NOCLIP);
            
            //Logical units are device dependent pixels, so this will create a handle to a logical font that is 36 pixels in height.
            //The width, when set to 10, will cause the font mapper to choose a font which, in this case, is compressed. 
            //The font face name will be Arial. This time nEscapement is at 250 tenths of a degree (25 degrees)
            hFont3 = CreateFont(36,10,250,0,FW_DONTCARE,FALSE,TRUE,FALSE,DEFAULT_CHARSET,OUT_OUTLINE_PRECIS,
                CLIP_DEFAULT_PRECIS,ANTIALIASED_QUALITY, VARIABLE_PITCH,TEXT("Arial"));
            SelectObject(hdc,hFont3);

            //Sets the coordinates for the rectangle in which the text is to be formatted.
            SetRect(&rect, 500, 200, 1400, 600);
            SetTextColor(hdc, RGB(0,0,255));
            DrawText(hdc, TEXT("Drawing Text with Arial"), -1,&rect, DT_NOCLIP);

            SelectObject(hdc,hFontOriginal);
            DeleteObject(hFont1);
            DeleteObject(hFont2);
            DeleteObject(hFont3);
        
        EndPaint(hWnd, &ps);
        break;
        }
    case WM_DESTROY:
        PostQuitMessage(0);
        break;
    default:
        return DefWindowProc(hWnd, message, wParam, lParam);
    }
    return 0;
}

有关另一个示例,请参阅 “使用菜单”中的“为Menu-Item文本字符串设置字体”。

 备注

wingdi.h 标头将 CreateFont 定义为别名,该别名根据 UNICODE 预处理器常量的定义自动选择此函数的 ANSI 或 Unicode 版本。 将非中性编码别名与非非编码的代码混合使用可能会导致编译或运行时错误不匹配。 有关详细信息,请参阅 函数原型的约定。

要求

最低受支持的客户端 Windows 2000 Professional [仅限桌面应用]
最低受支持的服务器 Windows 2000 Server [仅限桌面应用]
目标平台 Windows
标头 wingdi.h (包括 Windows.h)
Library Gdi32.lib
DLL Gdi32.dll

另请参阅

CreateFontIndirect

CreateFontIndirectEx

DeleteObject

EnumFontFamilies

EnumFontFamiliesEx

EnumFonts

字体和文本函数

字体和文本概述

LOGFONT

SelectObject文章来源地址https://www.toymoban.com/news/detail-595911.html

到了这里,关于VS2019 MFC CreateFontW 创建字体函数详细解读的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • VS2019 MFC Teechart V5.1曲线控件使用方法Teechart Activex V5.1控件绘图控件 动态绘图

    Teechart控件安装注册:          1. 将TeeChart5.ocx 复制到C:WindowsSysWOW64。         2. 找到同目录下的cmd.exe。         3. 右键 管理员身份 打开 ,此刻进入的是system32 (不是管理员打开cmd的话,用win + R的话,会提示模块已加载,但对DllRegisterServer的调用失败)。    

    2024年02月05日
    浏览(73)
  • c#创建web项目 vs2019

    一、创建项目  二、右击项目添加新建Web服务项  三、启动测试 在刚才新建的Web服务项中简单写一个加法接口

    2023年04月08日
    浏览(44)
  • 记一次vs2019给MFC ListControl组件添加变量报错“未能返回新代码元素。可能语法错误。新元素名:x_xxxx”

    因一次项目给ListControl添加变量报错,解决后写下的该博客(查询到好多都是删除ncb文件的,浪费了很多时间)   具体为什么导致的这个情况,我也不太清楚(如果有大佬能科普一下,并告诉根本的解决方案就更好了),不过写代码的,都知道一切能点击的按钮都是对应的函数实现。

    2024年02月08日
    浏览(38)
  • C# WPF项目创建(基于VS 2019介绍)

    1.打开VS,选择《创建新项目》 2.选择《WPF应用》,这里设计两个有 .NET Framework框架 和 .NET core 框架, 如图所示: 区别: .NET Framework 框架只能在windows下使用 .NET core 框架支持linux 下运行 3. 项目名称根据需求自行命名,这边以“WpfApp1”来命名,位置自行选择,这边选择了\\\"E:

    2024年02月15日
    浏览(39)
  • Win10/Win7 离线安装 vs2019 详细步骤

    下载链接:https://visualstudio.microsoft.com/zh-hans/vs/ 点击右上角:免费 Visual Studio 说明:win7 安装 vs 时不建议安装最新版本,目前我装的是 vs2019 亲测可以使用!!!  正常 C++ 开发只需要下载:.NET桌面开发、使用 C++ 的桌面开发、使用 C++ 的移动开发、通用 windows 平台开发;即可

    2024年02月05日
    浏览(72)
  • VS2015项目中,MFC内存中调用DLL函数(VC6生成的示例DLL)

    本例主要讲一下,用VC6如何生成DLL,用工具WinHex取得DLL全部内容,VC2015项目加载内存中的DLL函数,并调用函数的示例。         本例中的示例代码下载,点击可以下载 1.新建项目,这里选择Win32 Dynamic-link Library,如下图:  2.选择“A simple DLL project”,然后点击完成,如下:

    2024年02月12日
    浏览(45)
  • VS2019 打包桌面应用程序详细步骤,包含运行环境(.NET Framework)

    本篇教程基于VS扩展插件Microsoft Visual Studio Installer Projects工具来打包, 在VS工具中进行安装,菜单栏【扩展(X)】 -- 【管理扩展】,在界面中输入Installer,找到Microsoft Visual Studio Installer Projects,点击下载 在解决方案上右键 –【添加】--【新建项目】– 【Setup Project】,

    2024年02月04日
    浏览(58)
  • 用VS2019图形学安装openGL库的详细步骤以及报错处理

    链接:https://pan.baidu.com/s/1F1gmz9a2uJ5FShRccZRqZw  提取码:lyzz 将文件保存下来放在新建的一个文件夹内,建议不要放在C盘上。然后将文件解压,可以看到如下五个文件: 1文件glut.h放在下面路径中: 在目录C:Program Files (x86)Microsoft Visual Studio2019CommunityVCToolsMSVC14.29.30037includ

    2024年02月04日
    浏览(51)
  • 基于VS编译器探测成员函数指针的调用规则,并分析MFC消息映射实现机制的局限性问题

    /* 当想继承MFC的窗口类时,如果有多重继承,则继承的窗口类顺序要特别注意(要在继承列表的首个); 否则根据MFC消息映射机制的实现方式;调用指向成员函数指针时;根据前面的规则会触发代码混淆,导致运行期错误;如下: 这个也是MFC 窗体类继承顺序的问题的根本原因

    2024年02月06日
    浏览(33)
  • 【C语言&C++编译器】VS2019离线安装版,附详细安装步骤和安装包

    网盘链接下载地址:链接:https://pan.baidu.com/s/1mj6ssEcyc1DBKTmRr_uoxw?pwd=2023 提取码:2023 --来自百度网盘超级会员V1的分享 —BD网盘链接点击跳转 1.右键 VS2019.rar ,选择解压到 VS2019 2.打开 vs2019vs2019_offlin 找到 vs_setup.exe 并双击启动 3.弹出界面选择 继续 4.在界面勾选以下如图选项,注

    2024年02月11日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包