Как получить координаты области клиентского окна

Я могу получить координаты всей области окна и координаты области клиента, используя вызовы GetClientRect и GetWindowRect Win32. Моя проблема в том, что GetClientRect всегда возвращает 0,0 для верхнего левого. Как я могу определить, какова фактическая область клиента относительно прямоугольника окна?

Ответ 1

Вы можете использовать ClientToScreen, чтобы получить координаты верхней левой (0,0) точки в координатах экрана. RECT, возвращаемый GetClientRect, будет подходящим, чтобы вы получили нижний правый угол (просто добавьте POINT, установленный ClientToScreen).

Ответ 2

Используйте ClientToScreen для преобразования координат клиента в координаты экрана. Окно rect (GetWindowRect) уже находится в экранных координатах и ​​включает в себя неклиентскую область (границы, подпись и т.д.).

Ответ 3

И если вы работаете с WinForms, вы можете использовать PointToScreen вместо ClientToScreen для решения, предложенного Ридом Копси.

Ответ 4

Вы также можете использовать функцию MapWindowPoints для преобразования всего RECT в экранные координаты сразу.

Ответ 5

Связь между прямоугольником окна (с границами и т.д.) и клиентом rect (внутри границ) наиболее легко встречается с помощью AdjustWindowRectEx(). Получите стиль окна и стиль ex в окне и вызовите эту функцию, чтобы увидеть, сколько границы на каждой стороне.