c++ - AddFontResource + SetCurrentConsoleFontEx 没有改变控制台字体
问题描述
我正在尝试将控制台字体更改为自定义字体,但是这个特定的代码段似乎没有完成任何事情,即使这是我在尝试在 Internet 上寻找解决方案时提出的。我通过手动安装并将其添加到控制台并使用此自定义字体测试了 SetCurrentConsoleFontEx,并且它运行正常。
#include <iostream>
#include <Windows.h>
int main()
{
std::cout << "Default font" << std::endl;
system("pause");
HANDLE m_stdOut = GetStdHandle(STD_OUTPUT_HANDLE);
AddFontResourceEx(L"Iosevka.ttf", FR_PRIVATE, 0);
SendNotifyMessage(HWND_BROADCAST, WM_FONTCHANGE, 0, 0);
CONSOLE_FONT_INFOEX cfie;
ZeroMemory(&cfie, sizeof(cfie));
cfie.cbSize = sizeof(cfie);
cfie.dwFontSize.Y = 21;
lstrcpyW(cfie.FaceName, L"Iosevka");
SetCurrentConsoleFontEx(m_stdOut, false, &cfie);
std::cout << "Custom font" << std::endl;
RemoveFontResource(L"Iosevka.ttf");
system("pause");
return 0;
}
解决方案
您正在AddFontResourceEx()
使用FR_PRIVATE
标志调用,这意味着该字体仅适用于您的进程。
不幸的是,控制台窗口不是您进程的一部分(GetWindowThreadProcessId()
在于这方面!)。它由系统进程托管(Win 7 之前的“csrss.exe”,此后的“conhost.exe”)。
要使字体可用于控制台,您必须删除FR_PRIVATE
标志或永久安装字体。
推荐阅读
- recursion - When will iteration be more readable than recursion?
- javascript - Pass node js variable to ejs template
- css - Background-size transition on hover makes image shake on safari 11.0.3
- mysql - could not get any response
- google-cloud-platform - 限制 Bigquery 导出到 Cloud Storage
- sql-server - How to trace down more information about SQL Server session ID in the past?
- php - Second form on page not performing any action
- java - 在生成 Junit 报告期间无法编译样式表
- javascript - Facebook error on product detail page(use Send to messenger plugin)
- javascript - 迭代对象数组的子对象-ReactJS