Ширина строки MFC без CDC - PullRequest
       11

Ширина строки MFC без CDC

3 голосов
/ 08 сентября 2011

Есть ли способ получить ширину строки в пикселях, не используя CDC или CDC, не связанный с дисплеем.Класс, который должен получить ширину строки, не наследуется от CWnd, чтобы использовать CWnd :: GetDC (), и нет способа передать существующий CDC в функцию.фиктивный CDC, который не связан с дисплеем, однако это приводит к сбою MFC.В идеале что-то вроде:

m_font = new CFont();
m_font->CreatePointFont(size * 10, _T("Arial"));

m_tempCDC = new CDC();
m_tempCDC->SelectObject(m_font);

return m_tempCDC->GetOutputTextExtent(_T("Test")).cx;

РЕДАКТИРОВАТЬ: должны заменить переменную имени шрифта для строкового литерала.

Ответы [ 2 ]

6 голосов
/ 08 сентября 2011

Ширина шрифта зависит от того, как он преобразуется в пиксели, и зависит от устройства, на котором он отображается.Это, очевидно, будет отличаться для принтера от монитора, например.Вот почему вам нужен DC для этой функции.

Вы можете получить DC для настольного компьютера, используя CDC::FromHandle(::GetDC(NULL)).

0 голосов
/ 08 сентября 2011

как вычислить ширину, если вы не знаете, какой шрифт вам нужен?

Я бы предложил рассчитать ширину в том месте, где вы видите контекст устройства, который вам нужен, и передать его в класс, где вам нужна эта ширина.

...