【问题标题】:Why are my font edges not smooth when drawn with the DrawText API?为什么使用 DrawText API 绘制时我的字体边缘不平滑?
【发布时间】:2011-09-19 05:13:23
【问题描述】:

当我在 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 a\r\nFile\r\nHere", -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;
    }

【问题讨论】:

    标签: c++ winapi gdi


    【解决方案1】:

    Myriad Pro 是一种 OpenType 字体,不受 GDI 支持。请选择 TrueType 字体。

    【讨论】:

    • +1 -- 没有考虑到这一点。 @Geore:如果你想支持这样的 OpenType 字体,你必须使用 Uniscribe。
    【解决方案2】:
    1. 为您的字体指定一个非零限定符。
    2. 确保您的 CreateFont 调用成功 - 如果失败,您将返回(锯齿状)SYSTEM 字体。

    关于您的示例代码的一般说明:

    1. 您正在泄漏 HFONT。
    2. 您可能应该 static_cast HFONT 而不是 C 风格的演员表。

    【讨论】:

      【解决方案3】:

      您可能希望为fdwQuality 参数(倒数第三个参数)传递ANTIALIASED_QUALITYCLEARTYPE_QUALITY

      【讨论】:

        【解决方案4】:

        确保在显示设置中启用了 ClearType。

        【讨论】:

        • 这会影响所有应用程序,而不仅仅是 OP 的
        • 是的,但如果它被禁用,它将影响所有应用程序 - 并最终阻止给定应用程序使用该功能。
        • @Ajay:OP 抱怨的是他的应用程序,而不是他的整个桌面。
        • @Billy,我明白这一点。换个角度看 - 如果您禁用了 Windows 主题(在服务级别!),哪个应用程序可以利用它?没有。无法为单个应用程序提供主题支持,而其他应用程序可能可以使用它。
        • @Ajay:不,如果您禁用了该功能,它就会被禁用。没有应用程序可以使用它。
        猜你喜欢
        • 1970-01-01
        • 2017-10-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多