вычисление минимального размера, необходимого для содержания диалога - PullRequest
0 голосов
/ 01 февраля 2012

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

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

1 Ответ

0 голосов
/ 01 февраля 2012

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

Из документации :

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

Итак, следующие шаги:

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

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

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

...