Что из этого я должен использовать в InvalidateRect для обновления моего окна? И почему?
В чем разница между GetClientRect и GetWindowRect в WinApi?
Ответ 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).
Дополнительно: клиентский адрес не включает строку заголовка, границы, полосы прокрутки, строку состояния...