Вычисление минимального размера, необходимого для содержания диалога

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

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

1 ответ

Решение

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

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

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

Итак, шаги:

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

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

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

Другие вопросы по тегам