Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/129.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ AddFontResource+;SetCurrentConsoleFontEx未更改控制台字体_C++_Winapi_Fonts_Console_Window - Fatal编程技术网

C++ AddFontResource+;SetCurrentConsoleFontEx未更改控制台字体

C++ AddFontResource+;SetCurrentConsoleFontEx未更改控制台字体,c++,winapi,fonts,console,window,C++,Winapi,Fonts,Console,Window,我正在尝试将控制台字体更改为自定义字体,但是这个特定的代码段似乎没有完成任何事情,尽管这是我在尝试在Internet上找到解决方案时提出的。我通过手动安装SetCurrentConsoleFontEx并将其添加到带有regestry的控制台中,测试了该自定义字体的SetCurrentConsoleFontEx,并且该字体运行正常 #include <iostream> #include <Windows.h> int main() { std::cout &l

我正在尝试将控制台字体更改为自定义字体,但是这个特定的代码段似乎没有完成任何事情,尽管这是我在尝试在Internet上找到解决方案时提出的。我通过手动安装SetCurrentConsoleFontEx并将其添加到带有regestry的控制台中,测试了该自定义字体的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;

}
#包括
#包括
int main()
{

std::cout您正在使用
FR\u PRIVATE
标志调用
AddFontResourceEx()
,这意味着字体仅对您的进程可用

不幸的是,控制台窗口不是进程的一部分(
GetWindowThreadProcessId()
就在这方面!)。它由一个系统进程托管(“csrss.exe”在Win 7之前,“conhost.exe”之后)

见:


要使字体可用于控制台,您必须删除
FR\u PRIVATE
标志或永久安装字体。

控制台窗口由系统进程所有,这就是为什么控制台窗口无法使用进程的私有字体。@zett42不幸的是,这里似乎没有问题。谢谢,我无法获得添加FontResourceEx()可以工作,即使没有FR_PRIVATE标志,也可以切换到AddFontResource(),但这也没有什么帮助。我决定先将字体添加到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont,然后一切都可以正常工作。