RemoveFontResourceA 函数 (wingdi.h)

RemoveFontResource 函数从系统字体表中删除指定文件中的字体。

如果字体是使用 AddFontResourceEx 函数添加的,则必须使用 RemoveFontResourceEx 函数。

语法

BOOL RemoveFontResourceA(
  [in] LPCSTR lpFileName
);

参数

[in] lpFileName

指向以 null 结尾的字符串的指针,该字符串命名字体资源文件。

返回值

如果该函数成功,则返回值为非零值。

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

注解

我们建议,如果应用在系统字体表中添加或删除字体,则通过向系统中的所有顶级窗口发送 WM_FONTCHANGE 消息来通知其他窗口更改。 应用通过调用 SendMessage 函数发送此消息,并将 hwnd 参数设置为 HWND_BROADCAST。

如果存在对字体的未完成引用,则关联的资源将保持加载状态,直到没有设备上下文使用该字体。 此外,如果字体在字体注册表中列出 (HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Fonts) ,并安装到 %windir%\fonts\ 文件夹以外的任何位置,则它可能会被加载到其他活动会话 (包括会话 0) 。

尝试替换包含具有未完成引用的字体的现有字体文件时,可能会收到一条错误,指示无法删除原始字体,因为即使在调用 RemoveFontResource 之后,该字体也正在使用中。 如果应用要求替换字体文件,若要将原始字体的资源计数减少到零,请在循环中调用 RemoveFontResource ,如此示例代码所示。 如果继续收到错误,则表明字体文件仍加载在其他会话中。 请确保字体未在字体注册表中列出,并重启系统以确保从所有会话中卸载字体。

注意 使用原始字体文件的应用仍可访问原始文件,在重新加载字体之前不会使用新字体。 调用 AddFontResource 以重新加载字体。 建议调用 AddFontResource 的次数与调用 RemoveFontResource 成功次数相同,如此示例代码所示。
 

int i = 0;
while( RemoveFontResource( FontFile ) )
{
    i++;
}

// TODO: Replace font file

while( i-- )
{
    AddFontResource( FontFile );
}

注意

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

要求

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

另请参阅

AddFontResource

字体和文本函数

字体和文本概述

RemoveFontResourceEx

SendMessage