Я могу получить координаты всей области окна и координаты области клиента, используя вызовы 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 в окне и вызовите эту функцию, чтобы увидеть, сколько границы на каждой стороне.