Проблема: нужно подогнать Static компонент под конкретный текст, для этого нужно узнать ширину текста в ПИКСЕЛЯХ. Вызываю GetTextExtentPoint32 (или любой другой типа GetTextExtent) и получаю размер непонятно в чём... Почитал, что это диалоговые юниты и надо использовать GetDialogBaseUnits и пару алгоритмов чтобы их перевести в пиксели. Пробовал несколько путей и ничего не выходит — не получаются пиксели и всё!
Если кто знает, пожалуйста, помогите вычислить эти долбанные пиксели. :crash:
Здравствуйте evergamer, Вы писали:
E>Проблема: нужно подогнать Static компонент под конкретный текст, для этого нужно узнать ширину текста в ПИКСЕЛЯХ. Вызываю GetTextExtentPoint32 (или любой другой типа GetTextExtent) и получаю размер непонятно в чём... Почитал, что это диалоговые юниты и надо использовать GetDialogBaseUnits и пару алгоритмов чтобы их перевести в пиксели. Пробовал несколько путей и ничего не выходит — не получаются пиксели и всё! E>Если кто знает, пожалуйста, помогите вычислить эти долбанные пиксели.
С долбанными пикселями — это в форум MFC или WINAPI, какой ближе. Там тебе расскажут, что сначала нужно подходящий шрифт в контекст выбрать, а уже потом GetTextExtentPoint32 вызывать.
Здравствуйте evergamer, Вы писали:
E>Алекс, спасибо за ответ, но как понять "подходящий шрифт в контекст выбрать"? Это какой?
Подходящий — это тот, который сейчас установлен у окна Static, ты же ведь в него текст выводить будешь. А GetTextExtentPoint32 возвращает размер в пикселях, так что никаких преобразований и танцев с бубнами не нужно.
E>Я делаю следующую последовательность действий:
E>BOOL MyMessageBoxDlg::OnInitDialog() E>{ E> ... E> // Определяю диалоговые юниты E> CRect rc(0, 0, 4, 8); E> MapDialogRect(&rc); E> int baseUnitY = rc.bottom; E> int baseUnitX = rc.right;
E> // Вызываю GetTextExtentPoint32 E> GetTextExtentPoint32(hdc, lpszTemp, lpszTemp.GetLength(), &size);
E> // Преобразую size E> size.cx = (size.cx * baseUnitX)/4; E> size.cy = (size.cy * baseUnitY)/8;
E> ... и получаю совсем не пиксели
E>}
CClientDC dc(this);
CFont * pFont = GetDlgItem(IDC_THATSTATIC)->GetFont();
CFont * pOldFont = dc.SelectObject(pFont);
CSize size;
GetTextExtentPoint32(dc, lpszTemp, lpszTemp.GetLength(), &size);
dc.SelectObject(pOldFont);
// size содержит размер текста в пикселях, каким его
// выведет окно Static