Вычисление минимального размера, необходимого для содержания диалога
Я хочу вычислить минимальный размер как вертикальный, так и горизонтальный, который будет содержать диалог. Я использовал GetClientRect, чтобы определить ширину и высоту. Затем для ширины, когда требуется вертикальная полоса прокрутки, я добавил GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME), но мне кажется, что я на несколько пикселей меньше.
Что GetSysMetrics мне нужно учитывать как для горизонтальных, так и для вертикальных размеров с полосами прокрутки и без них?
1 ответ
Вы должны учитывать границы окна и другое пространство, не относящееся к области клиента. Самый простой способ сделать это - использовать AdjustWindowRect()
или же AdjustWindowRectEx()
, Однако вам все равно придется самостоятельно обрабатывать полосы прокрутки:
Из документации:
Функция AdjustWindowRectEx не учитывает стили WS_VSCROLL или WS_HSCROLL. Чтобы учесть полосы прокрутки, вызовите функцию GetSystemMetrics с помощью SM_CXVSCROLL или SM_CYHSCROLL.
Итак, шаги:
GetClientRect()
чтобы получить минимальный размер клиентской области.AdjustWindowRectEx()
преобразовать размер клиента в размер окна на основе ваших стилей окна.При необходимости примените дополнительные настройки для учета полос прокрутки (
GetSystemMetrics()
сSM_CXVSCROLL
и / илиSM_CYHSCROLL
).