为什么使用DrawText API绘制时字体边缘不平滑
Why are my font edges not smooth when drawn with the DrawText API?
当我在dc上绘制文本时,文本会出现粗糙的边缘,而在这个WindowProc处理的多个窗口上,每个窗口之间的文本看起来都不一样,这看起来很不专业。有没有一种方法可以把它画出来,使它的边缘清晰、光滑?
case WM_PAINT:
{
GetClientRect(hwnd, &rect);
hdc = BeginPaint(hwnd, &ps);
hdcmem = CreateCompatibleDC(hdc);
BITMAP bm;
HBITMAP hbmold = (HBITMAP)SelectObject(hdcmem, gbutton);
GetObject(gbutton, sizeof(bm), &bm);
SetBkMode(hdcmem, TRANSPARENT);
SetTextColor(hdcmem, RGB(74,88,91));
HFONT hf = CreateFont(30, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, L"Myriad Pro");
HFONT hfold = (HFONT)SelectObject(hdcmem, hf);
//the next line works fine, but with rough text edges.
DrawText(hdcmem, L"Drag arnFilernHere", -1, &rect, DT_CENTER | DT_VCENTER );
SelectObject(hdcmem, hfold);
BitBlt(hdc, 0,0,bm.bmWidth,bm.bmHeight,hdcmem,0,0,SRCCOPY);
SelectObject(hdcmem, hbmold);
DeleteDC(hdcmem);
EndPaint(hwnd, &ps);
break;
}
Myriad Pro是一种OpenType字体,不受GDI支持。请选择TrueType字体。
- 为字体指定一个非零限定符
- 确保您的
CreateFont
调用成功——如果调用失败,您将返回到(锯齿状)SYSTEM字体
关于示例代码的一般说明:
- 你泄露了HFONT
- 您可能应该
static_cast
HFONT,而不是C样式的强制转换
您可能想要为fdwQuality
参数(倒数第三个参数)传递ANTIALIASED_QUALITY
或CLEARTYPE_QUALITY
。
确保在"显示设置"中启用ClearType。
相关文章:
- 在C++中测量postscript字体宽度
- 如何在Directwrite中获得给定字体的可用OpenType功能
- 如何获取边缘窗口句柄 (HWND)?
- 提升如何在图形可视化中写入边缘的权重?
- 在 c++ 中使用 Tensorflow Lite 在边缘 TPU 上运行"mobilenet_ssd_v2_coco_quant_postprocess_edgetpu.tflite"时出现问题
- 分数背包边缘箱
- SetCurrentConsoleFontEx() 不适用于自定义安装的字体
- 应用程序无法找到铬边缘浏览器
- C++ wxWidgets:在创建小部件后设置字体
- C++ wxWidgets:更改大小器的字体
- C++ 位图中的 ttc 字体
- 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?Qt C++
- 更改 Windows GUI 中静态文本框的字体大小
- SFML 中的字体.信息不显示在屏幕上.显示的不是信息,而是点
- 如何获取控制面板设置值,如字体大小
- ExtTextOut 文本的持续闪烁,在一段时间后,文本将恢复为默认字体
- 使用 TTF_RenderText() 加载字体时获取段错误 TTF_OpenFontRW()
- 通知 Windows 系统应用程序字体已被卸载/删除
- 使用 Visual Studio C++ 在控制台中控制字体和字符集
- 为什么使用DrawText API绘制时字体边缘不平滑