Посчитать размер окна по размеру клиентской части
От: Marty Пират https://www.youtube.com/channel/UChp5PpQ6T4-93HbNF-8vSYg
Дата: 26.12.23 16:34
Оценка:
Здравствуйте!

Надо задать клиентскую область конкретного размера. Как бы посчитать, какого размера надо сделать окно? Может, есть какая-то функция? Или самому возится считать, есть ли заголовки, есть ли клиент эдж, есть ли толстая рамка окна для ресайза или нет, и тд и тп?
Маньяк Робокряк колесит по городу
Re: Посчитать размер окна по размеру клиентской части
От: Pavel Dvorkin Россия  
Дата: 27.12.23 02:35
Оценка:
Здравствуйте, Marty, Вы писали:

M>Надо задать клиентскую область конкретного размера. Как бы посчитать, какого размера надо сделать окно? Может, есть какая-то функция? Или самому возится считать, есть ли заголовки, есть ли клиент эдж, есть ли толстая рамка окна для ресайза или нет, и тд и тп?


https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-adjustwindowrect
https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-adjustwindowrectex
With best regards
Pavel Dvorkin
Re[2]: Посчитать размер окна по размеру клиентской части
От: qaz77  
Дата: 27.12.23 06:26
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-adjustwindowrect

PD>https://learn.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-adjustwindowrectex

Если окно по своему обрабатывает WM_NCCALCSIZE, то такой подход не пройдет.
AdjustWindowRect только для простых случаев, а еще там костыли ...ForDpi добавили...
Отредактировано 27.12.2023 6:29 qaz77 . Предыдущая версия .
Re: Посчитать размер окна по размеру клиентской части
От: qaz77  
Дата: 27.12.23 06:29
Оценка: +1
Здравствуйте, Marty, Вы писали:

M>Надо задать клиентскую область конкретного размера. Как бы посчитать, какого размера надо сделать окно? Может, есть какая-то функция? Или самому возится считать, есть ли заголовки, есть ли клиент эдж, есть ли толстая рамка окна для ресайза или нет, и тд и тп?


Я бы создавал невидимое окно с дефолтным размером.
Потом GetWindowRect + GetClisntRect + ClientToScreen и получаем все четыре отступа клиентской части.
Далее вычисляем необходимый window rect и SetWindowPos c SWP_SHOWWINDOW.

Такой подход, скорее всего, учтет все нюансы, даже самописный обработчик WM_NCCALCSIZE.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.