2012-01-31 2 views
0

Я хочу вычислить минимальный размер как вертикальный, так и горизонтальный, который будет содержать диалог. Я использовал GetClientRect для определения ширины и высоты. Затем для ширины, когда требуется вертикальная полоса прокрутки, я добавил GetSystemMetrics (SM_CXVSCROLL) + GetSystemMetrics (SM_CXSIZEFRAME), но, похоже, я немного отстаю на несколько пикселей.вычисление минимального размера, необходимого для включения диалога

Что нужно для учета GetSysMetrics как для горизонтального, так и для вертикального измерения с полосами прокрутки и без них?

ответ

0

Вам необходимо учитывать границы окна и другое пространство, не относящееся к клиенту. Самый простой способ сделать это - использовать AdjustWindowRect() или AdjustWindowRectEx(). Тем не менее, вам все равно нужно обрабатывать полосы прокрутки сами:

От documentation:

Функция AdjustWindowRectEx не принимает WS_VSCROLL или WS_HSCROLL стилей во внимание. Чтобы учесть полосы прокрутки, вызовите функцию GetSystemMetrics с помощью SM_CXVSCROLL или SM_CYHSCROLL.

Итак, шаги:

  1. GetClientRect(), чтобы получить минимальную площадь клиента размер.

  2. AdjustWindowRectEx() для преобразования размера клиента в размер окна на основе стилей окна.

  3. При необходимости внесите дополнительные корректировки для учета полос прокрутки (GetSystemMetrics() с SM_CXVSCROLL и/или SM_CYHSCROLL).

+0

Спасибо, это делает трюк! Конечно, у меня болит голова, потому что добавление вертикальной полосы прокрутки может привести к необходимости горизонтальной полосы прокрутки. –