【问题标题】:How to set console font to Raster Font, programmatically?如何以编程方式将控制台字体设置为光栅字体?
【发布时间】:2016-03-02 17:59:19
【问题描述】:

如何确保命令提示符的当前字体在运行时是默认的光栅字体? 我正在使用 C++ 和 WinApi。

目前我使用了GetConsoleFontEx();SetConsoleFontEx();,但我无法为CONSOLE_FONT_INFOEXFaceName 属性找到正确的值。我在网上找到了一些字体设置为 Lucida 和/或 Consolas 的示例,但这不是我想要的。

这是我当前代码的 sn-p:

COORD fs = {8, 8};
CONSOLE_FONT_INFOEX cfie = {0};
cfie.cbSize = sizeof(cfie);

GetCurrentConsoleFontEx(hOut, 0, &cfie);

char fn[] = "Raster"; // Not really doing anything
strcpy_s((char*)cfie.FaceName, 32, fn); // Not sure if this is right
cfie.dwFontSize.X = fs.X;
cfie.dwFontSize.Y = fs.Y;

SetCurrentConsoleFontEx(hOut, 0, &cfie);

我测试了SetCurrentConsoleFontEx()的返回值,非零,表示调用成功。不过字体没有变化。

【问题讨论】:

    标签: c++ c windows winapi console


    【解决方案1】:

    改编SetCurrentConsoleFontEx()MS example,这似乎可行。注意当提示Enter被按下时,整个控制台会改变字体。

    #include <windows.h>
    #include <stdio.h>
    #include <string.h>
    
    int main(int argc, char** args)
    { 
        CONSOLE_FONT_INFOEX cfi;
        cfi.cbSize = sizeof cfi;
        cfi.nFont = 0;
        cfi.dwFontSize.X = 0;
        cfi.dwFontSize.Y = 20;
        cfi.FontFamily = FF_DONTCARE;
        cfi.FontWeight = FW_NORMAL;
        printf("A quick brown fox jumps over the lazy dog\n");
    
        printf("Setting to Lucida Console: press <Enter> ");
        getchar();
        wcscpy(cfi.FaceName, L"Lucida Console");
        SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    
        printf("Setting to Consolas: press <Enter> ");
        getchar();
        wcscpy(cfi.FaceName, L"Consolas");
        SetCurrentConsoleFontEx(GetStdHandle(STD_OUTPUT_HANDLE), FALSE, &cfi);
    
        printf("Press <Enter> to exit");
        getchar();
        return 0;
    }
    

    【讨论】:

    • 据我所知,这回答了我明确提到不感兴趣的问题How to change the font to Consolas or Lucida?。相反,我正在寻找一种将字体更改为 Raster Font,以防用户将默认字体设置为 Consolas 或 Lucida。
    • 哦,抱歉,我以为光栅字体是指默认的 Windows 7 命令提示符字体。我说的是位图字体。 Here's 它拥有的字符表。如果你打开命令提示符属性,字体选项卡,你会看到它列为“光栅字体”。
    • 尝试使用“终端”字体
    • 在我提到的两种字体在 Windows 控制台中可用之前,我曾经使用我安装的一种名为 OEM*** 的光栅字体,抱歉我现在找不到它。
    • 嗯,很有趣。我注意到如果我使用明显无效的值作为FaceName,它会将字体设置为位图字体。但是,当我这样做时,我无法再有效地更改dwFontSize。然后我注意到我没有像你那样设置FontFamilyFontWeight,所以我试了一下。现在,无论我使用什么(无效)字体名称,它似乎都可以工作。因此,如果我将字体名称设置为“终端”,它似乎可以工作。谢谢。
    猜你喜欢
    • 1970-01-01
    • 2018-06-12
    • 2013-01-20
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2015-08-28
    • 2014-09-05
    • 2023-03-20
    相关资源
    最近更新 更多