winapi - 如何在 GDI 中绘制光栅控制台字体?
问题描述
如何在 GDI 应用程序中绘制 Windows 控制台使用的光栅字体?例如,此屏幕截图中显示的 8x8 固定字体。
这些字体可以通过 CreateFont() API 使用,还是 Windows 加载这些字体的特殊方式?
解决方案
控制台使用"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;
}
推荐阅读
- twilio - Twilio Video 手动开始录制
- kotlin - 带有安全运算符的 Kotlin 非空断言
- c++ - C++ 递归地遍历路径。错误:未找到采用“const std::filesystem::directory_entry”类型的右手操作数的运算符
- python - 如何在 web2py 中呈现 PyChart.JS 图表?
- ios - GCD串行异步队列与嵌套在异步中的串行同步队列
- python - 如何在 Python 2 中使用 glob() 递归查找路径?
- javascript - Touchstart 和 Touchend 在移动设备上不起作用
- kubernetes - 如何在 kubernetes Dashboard 上将用户限制为一个命名空间?
- python - VS Code Python 脚本第二天突然停止工作
- python - Django app on heroku, ModuleNotFoundError: No module named 'spread'