首页 > 解决方案 > 如何在 GDI 中绘制光栅控制台字体?

问题描述

如何在 GDI 应用程序中绘制 Windows 控制台使用的光栅字体?例如,此屏幕截图中显示的 8x8 固定字体。命令提示符属性 - 光栅字体

这些字体可以通过 CreateFont() API 使用,还是 Windows 加载这些字体的特殊方式?

标签: winapigdibitmap-fonts

解决方案


控制台使用"fixed width fonts",例如"Courier New"(在所有 Windows 版本中可用)或"Consolas"(从 Vista 开始可用)。

固定宽度字体不一定是光栅。要使用光栅字体,请枚举字体以查找光栅字体,例如"Terminal""Fixedsys"。您必须使用正确的大小(例如,"Terminal"字体为 18),否则 Windows 可能会替换为不同的字体并调整大小。DPI设置也有问题。如果程序不支持 DPI,则如果工作站具有高 DPI 设置,则会发生放大。

case WM_PAINT: 
{
    PAINTSTRUCT ps;
    auto hdc = BeginPaint(hwnd, &ps);
    auto hfont = CreateFont(-18, 0, 0, 0, 0, 0, 0, 0,
        ANSI_CHARSET,
        OUT_DEVICE_PRECIS,
        CLIP_DEFAULT_PRECIS,
        DEFAULT_QUALITY,
        DEFAULT_PITCH,
        L"Terminal");

    auto oldfont = SelectObject(hdc, hfont);

    RECT rc = { 0,0,100,300 };
    DrawText(hdc, L"Test 123", -1, &rc, DT_LEFT | DT_TOP);

    SelectObject(hdc, oldfont);
    DeleteObject(hfont);

    EndPaint(hwnd, &ps);
    return 0;
}

推荐阅读