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函数用于改变指定窗口的位置和大小。该函数适用于顶级窗口和子窗口,具体行为如下:
- 顶级窗口:位置和尺寸相对于屏幕左上角。
- 子窗口:位置和尺寸相对于父窗口客户区的左上角
MoveWindow适用于只需要简单移动或调整窗口位置和大小的场景。如果你不需要复杂的窗口管理功能,使用MoveWindow会更加直接和高效。
6. SetWindowPos
除了具备MoveWindow的所有功能外,SetWindowPos还允许更精细的控制,包括设置窗口的Z顺序(即窗口的叠放顺序)、是否应该被重绘、是否应该激活窗口等。它接受更多的参数,包括窗口句柄、插入点窗口句柄、新的位置和大小、标志位等。SetWindowPos的功能更加全面,适用于需要更多控制的场景
SetWindowPos适用于需要更精细控制的场景,比如需要将窗口置于特定Z顺序、控制重绘行为或激活窗口等。如果你需要更多的灵活性,SetWindowPos是更好的选择。