Window的Window/Client坐标

📅 2026/7/4 12:28:46 👁️ 阅读次数 📝 编程学习
Window的Window/Client坐标

GetWindowRect

屏幕坐标

GetClientRect

只能获取客户区尺寸

ScreenToClient

屏幕坐标与指定窗口客户区坐标

ClientToScreen

MoveWindow

顶级窗口‌:屏幕坐标。

子窗口‌:父窗口客户区坐标‌

SetWindowPos‌

1. GetWindowRect

‌ GetWindowRect‌是一个Windows API函数,用于获取指定窗口的边框矩形尺寸。该函数返回窗口的边框矩形,包括客户区与非客户区(标题栏和边框),尺寸以屏幕坐标表示。‌

在窗口最大化后,有的Window版本,其左上角坐标为负数,即如屏幕坐标尺寸为(1920*1080),系统任务栏高度50,,获取的窗口坐标为[(-9,-9),(1929,1039)]。

2. GetClientRect

GetClentRect()获取的是自身客户区,其左上角以自身客户区的左上角为(0,0)。不含标题栏与边框。

因此,该函数只能得到自身客户区的大小,而不能得到相对屏幕/父窗口的相对位置。

3. ScreenToClient

  • API原型:BOOL ScreenToClient(HWND hWnd , LPPOINT lpPoint);

ScreenToClient()把屏幕坐标系下的坐标转换为HWND所对应窗口客户区坐标系下的坐标.

  • 对应MFC中的函数原型: void ScreenToClient(LPRECT lpRect) ;

调用方式为:pWnd-> ScreenToClient(&rc),是将屏幕下的矩形坐标rc转换成为pWnd窗口客户区坐标系下的矩形坐标。

4. ClientToScreen

其作用与ScreenToClient相反。

  • API原型:BOOL ClientToScreen(HWND hWnd , LPPOINT lpPoint);

ClientToScreen ()把HWND所对应窗口客户区坐标系下的坐标转换为屏幕坐标系下的坐标.

  • 对应MFC中的函数原型: void ClientToScreen(LPRECT lpRect) ;

调用方式为:pWnd-> ClientToScreen(&rc),是将pWnd窗口客户区坐标系下的矩形坐标转rc换成为屏幕下的矩形坐标。

在某些情况下(如窗口被最小化或尚未完全显示时),以上四个函数可能不会返回预期的结果。因此,在调用该函数之前,最好确保窗口处于活动状态并且已经完全显示出来。

5. MoveWindow

‌ MoveWindow函数‌用于改变指定窗口的位置和大小。该函数适用于顶级窗口和子窗口,具体行为如下:

  1. ‌顶级窗口‌:位置和尺寸相对于屏幕左上角。
  2. ‌子窗口‌:位置和尺寸相对于父窗口客户区的左上角‌

MoveWindow‌适用于只需要简单移动或调整窗口位置和大小的场景。如果你不需要复杂的窗口管理功能,使用MoveWindow会更加直接和高效。

6. SetWindowPos‌

除了具备MoveWindow的所有功能外,SetWindowPos还允许更精细的控制,包括设置窗口的Z顺序(即窗口的叠放顺序)、是否应该被重绘、是否应该激活窗口等。它接受更多的参数,包括窗口句柄、插入点窗口句柄、新的位置和大小、标志位等。SetWindowPos的功能更加全面,适用于需要更多控制的场景‌

SetWindowPos‌适用于需要更精细控制的场景,比如需要将窗口置于特定Z顺序、控制重绘行为或激活窗口等。如果你需要更多的灵活性,SetWindowPos是更好的选择。