Проблемы при использовании GetTextExtentExPoint для вычисления длины строки - PullRequest
0 голосов
/ 13 января 2010

Я создал объект шрифта и выделил его в содержимом устройства, затем вычислил экстент строки, используя WIN32 API GetTextExtentExPoint, но полученный мной экстент при использовании системного шрифта по умолчанию. Например, когда я использую системный шрифт по умолчанию, размер строки составляет 36 пикселей по ширине и 16 пикселей по высоте, а также 72 пикселя по ширине и 24 пикселя по высоте при использовании созданного мной шрифта. Но я всегда получал 36 пикселей, независимо от того, использовал системный шрифт по умолчанию или шрифт, который я создал. В чем проблема с моими кодами?

Коды:

HDC hDC = GetDC();
ATLASSERT(hDC);

HFONT _hFontTitle = 0;
HFONT hSysFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
ATLASSERT(hSysFont);
LOGFONT lf;
if(0 == GetObject(hSysFont, sizeof(LOGFONT), &lf))
    _hFontTitle = CreateFont(16, 12, 0, 0, FW_BOLD, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Fixedsys"));
else{
    lf.lfHeight = 16;
    lf.lfWidth  = 12;
    lf.lfWeight = FW_BOLD;

    _hFontTitle = CreateFontIndirect(&lf);
    ATLASSERT(_hFontTitle);
}
HFONT _hFontContent = 0;
HFONT hSysFont = (HFONT)GetCurrentObject(hDC, OBJ_FONT);
LOGFONT lf;
if(0 == GetObject(hSysFont, sizeof(LOGFONT), &lf))
        _hFontContent = CreateFont(12, 9, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, DEFAULT_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, PROOF_QUALITY, FIXED_PITCH|FF_DONTCARE, _T("Fixedsys"));
else{
    lf.lfHeight = 12;
    lf.lfWidth  = 9;
    lf.lfWeight = FW_NORMAL;

    _hFontContent = CreateFontIndirect(&lf);
    ATLASSERT(_hFontContent);
}

SIZE sizeTitle = TextMetricsHelper::GetTextLayout(hDC, _szTitle.c_str(), _szTitle.size(), _hFontTitle);
SIZE sizeContent = TextMetricsHelper::GetTextLayout(hDC, _szContent.c_str(), _szContent.size(), _hFontContent);

Пока GetTextLayout равен:

SIZE GetTextLayout(HDC hDC, LPCTSTR lpszText, unsigned int cbText, HFONT hFont)
{
    //RECT rcText = {0, 0, 8, 10};

    HFONT hOldFont = (HFONT)SelectObject(hDC, (HGDIOBJ)hFont);

    SIZE textSize;

    GetTextExtentPoint32(hDC, lpszText, cbText, &textSize);
    //GetTextExtentExPoint(hDC, lpszText, cbText, 0, 0, 0, &sizeOfTitle);
    //DrawText(hDC, lpszText, cbText, &rcText, DT_CALCRECT);

    SelectObject(hDC, hOldFont);

    return textSize;
}

1 Ответ

0 голосов
/ 13 января 2010

Не знаю много о создании шрифтов и так далее, но я замечаю, что обе ваши строки CreateFont присваивают свой результат одной и той же переменной _hFontTitle. Это намерение?

...