RemoveFontResourceA 函数 (wingdi.h)

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

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

语法

BOOL RemoveFontResourceA(
  [in] LPCSTR lpFileName
);

参数

[in] lpFileName

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

返回值

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

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

言论

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

如果有对字体的未完成引用,则关联资源将保持加载状态,直到没有设备上下文使用它。 此外,如果字体在字体注册表(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 [仅限桌面应用]
目标平台 窗户
标头 wingdi.h (包括 Windows.h)
Gdi32.lib
DLL Gdi32.dll

另请参阅

AddFontResource

字体和文本功能

字体和文本概述

RemoveFontResourceEx

SendMessage