Получить ширину текста в MFC - PullRequest
5 голосов
/ 17 ноября 2009

Я хочу динамически изменить размер CButton по ширине текста внутри него. Есть ли встроенный способ сделать это в MFC, или способ вычисления ширины пикселя некоторого указанного текста (чтобы я мог использовать CWnd::SetWindowPos)?

Ответы [ 4 ]

8 голосов
/ 17 ноября 2009

Это утомительно. Вам нужно использовать CWnd::GetFont() на кнопке, чтобы получить используемый шрифт, а затем использовать стандартный GetTextText для объекта CDC, где вы выбрали этот шрифт. Это выглядит как

CClientDC dc( &button );
CFont * pOldFont = dc.SelectObject( button.GetFont() );
 ... dc.GetTextExtent...
dc.SelectObject( pOldFont);
6 голосов
/ 17 ноября 2009

Вы можете использовать CDC :: GetTextExtent , чтобы вычислить ширину текста определенного шрифта. Используйте CWnd :: GetDC , чтобы получить контекст устройства из элемента управления, отображающего текст.

4 голосов
/ 17 ноября 2009

Помимо ответа @ demoncodemonkey, вы можете вызвать CDC :: DrawText с флагом DT_CALCRECT. Таким образом, текст не будет нарисован, но CRect, который вы передадите функции, будет иметь ширину и высоту текста для рисования.

Это особенно полезно, если вы хотите рисовать текст с переносами строк (используя флаг DT_WORDBREAK). Вы не сможете сделать это, используя CDC::GetTextExtent.

1 голос
/ 24 января 2014
CClientDC hdc(this);
GetRect.SetRect(0,0,iLabelWidth,0);
//
//To get Height of Lable in advance
//
hdc.DrawText(
                TempData,
                TempData.GetLength(),
                GetRect,
                DT_CALCRECT | DT_MODIFYSTRING | DT_WORDBREAK 
            );
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...