Подтвердить что ты не робот

В чем разница между GetClientRect и GetWindowRect в WinApi?

Что из этого я должен использовать в InvalidateRect для обновления моего окна? И почему?

4b9b3361

Ответ 1

Окно rect включает в себя неклиентскую область, то есть границы окна, панель заголовка и т.д. Клиентский адрес не имеет.

GetWindowRect возвращает прямоугольник в координатах экрана, тогда как GetClientRect возвращает прямой в клиентских координатах.

InvalidateRect получает прямоугольник в координатах клиента. Если вы хотите аннулировать всю свою клиентскую область, перейдите NULL в InvalidateRect. Вы можете передать в rect, возвращенный GetClientRect, но гораздо проще и понятнее передать NULL.

Ответ 2

GetClientRect получает координаты области клиентского окна. В частности, это область внутри окна хром и исключает заголовок и т.д. Один из комментариев Страница MSDN подводит итог:

Я бы сказал, что эта функция возвращает размер области, которую я могу отобразить.

GetWindowsRect получает координаты всего окна. Этот включает заголовок, строку состояния и т.д. Однако в соответствии с комментарием страницы MSDN

Приложения под Vista, которые не связаны с WINVER = 6, получат вводящий в заблуждение набор значений, которые не учитывают дополнительное дополнение "стеклянных" пикселей Vista Aero к окну.

Итак, если это не было исправлено для Windows 7, дважды проверьте полученный результат и убедитесь, что у вас есть правильное значение WINVER.

Ответ 3

Очень простое объяснение состоит в том, что GetWindowRect() дает прямоугольник, который включает границы окна. GetClientRect() дает прямоугольник, который исключает границы - область, выделенную для конкретного окна.

Обратите внимание, что GetWindowRect() возвращает прямоугольник в координатах экрана - координаты, относящиеся к экрану/монитору. GetClientRect() возвращает прямоугольник, который относительно себя.

Ответ 4

От MSDN:
GetWindowRect
Извлекает размеры ограничивающего прямоугольника указанного окна. Размеры указаны в координатах экрана, которые относятся к верхнему левому углу экрана.

GetClientRect
Получает координаты области клиентского окна. Координаты клиента определяют верхние и нижние правые углы клиентской области. Поскольку координаты клиента относятся к верхнему левому углу клиентской области окна, координаты верхнего левого угла равны (0,0).

Дополнительно: клиентский адрес не включает строку заголовка, границы, полосы прокрутки, строку состояния...