Когда программа изменяет шрифт в окне редактирования, ей необходимо вычислить новую высоту окна редактирования, чтобы шрифт отобразился правильно. Если edit control содержит бордюр, то элемент управления должен автоматически добавить белое пространство, чтобы текст не наезжал на бордюр.
В этой статье, на примере показывается, как программа может изменять высоту окошка редактирования при изменении шрифта, чтобы текст в окошке смотрелся правильно. Высота окошка редактирования вычисляется как высота шрифта плюс половина высоты наименьшего шрифта окошка редактирования или высоты системного шрифта. Для того, чтобы вычислить новую высоту edit control при смене шрифта, можно воспользоваться следующей функцией: void ResizeEdit(HWND hwndEdit, HFONT hNewFont) { HFONT hSysFont, hOldFont; HDC hdc; TEXTMETRIC tmNew, tmSys; RECT rc; int nTemp;
// Получаем DC для edit control. hdc = GetDC(hwndEdit);
// Получаем метрики системного шрифта. hSysFont = GetStockObject(SYSTEM_FONT); hOldFont = SelectObject(hdc, hSysFont); GetTextMetrics(hdc, &tmSys);
// Получаем метрики для нового шрифта. SelectObject(hdc, hNewFont); GetTextMetrics(hdc, &tmNew);
// Возвращаем первоначальный шрифт в DC и освобождаем DC. SelectObject(hdc, hOldFont); DeleteObject(hSysFont); ReleaseDC(hwndEdit, hdc);
// Вычисляем новую высоту для окошка редактирования. nTemp = tmNew.tmHeight + (min(tmNew.tmHeight, tmSys.tmHeight)/2) + (GetSystemMetrics(SM_CYEDGE) * 2);
// Изменяем размер окна редактирования. GetWindowRect(hwndEdit, &rc); MapWindowPoints(HWND_DESKTOP, GetParent(hwndEdit), (LPPOINT)&rc, 2); MoveWindow( hwndEdit, rc.left, rc.top, rc.right - rc.left, nTemp, TRUE); } |