Почему края моего шрифта не сглаживаются при рисовании с помощью API DrawText? - PullRequest
0 голосов
/ 21 июня 2011

Когда я рисую текст на постоянном токе, текст получается с неровными краями, и в нескольких окнах, которые обрабатывает этот 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;
    }

Ответы [ 4 ]

3 голосов
/ 21 июня 2011

Myriad Pro - это шрифт OpenType, не поддерживаемый GDI. Вместо этого выберите шрифт TrueType.

3 голосов
/ 21 июня 2011
  1. Укажите ненулевое значение для вашего шрифта.
  2. Убедитесь, что ваш CreateFont вызов выполнен успешно - в случае сбоя вы вернетесь к (неровному) шрифту SYSTEM.

Общие замечания о вашем примере кода:

  1. Вы пропускаете HFONT.
  2. Вы, вероятно, должны static_cast HFONT, а не кастом в стиле C.
0 голосов
/ 21 июня 2011

Убедитесь, что ClearType включен в настройках дисплея.

0 голосов
/ 21 июня 2011

Возможно, вы хотите передать ANTIALIASED_QUALITY или CLEARTYPE_QUALITY для параметра fdwQuality (с третьего по последний параметр).

...