我有2个窗户,或者说是窗户把手。我想得到一个窗口的位置和大小,并将它们应用到另一个窗口,以便第二个窗口完全覆盖第一个窗口。
现在我正在使用GetWindowRect()
来获取一个窗口的位置和大小,例如,
IntPtr hWnd1 = some window handle;
Rect rect = new Rect();
GetWindowRect(hWnd1, ref rect);
经过一些谷歌搜索后,似乎我必须使用SetWindowPos()
移动并调整我的其他窗口的大小。
SetWindowPos(hWnd2, some coords here);
但是,我不知道如何将RECT
返回的GetWindowRect()
结构转换为我可以与SetWindowPos()
一起使用的坐标,感谢任何帮助。
答案 0 :(得分:1)
我认为你必须将“左,上,右,下”转换为“X,Y,宽度,高度”:
RECT rct = GetWindowRect(windowHandler);
SetWindowPos(windowHandler, HWND_TOP, rct.Left, rct.Top, rct.Right - rct.Left, rct.Bottom - rct.Top, SWP_SHOWWINDOW);
您可能应该使用 GetWindowPlacement 而不是 GetWindowRect ,如下所示:
WINDOWPLACEMENT place;
bool ok = GetWindowPlacement(hwndTarget, out place);
ok = SetWindowPos(hwndSrc, new IntPtr(0), place.NormalPosition.Left, place.NormalPosition.Top, place.NormalPosition.Width, place.NormalPosition.Height, SetWindowPosFlags.ShowWindow);
请注意,这仅在窗口处于“恢复”位置(未最大化)时才有效。
我省略了互操作导入和结构,您可以在http://www.pinvoke.net/default.aspx/user32/GetWindowPlacement.html和http://www.pinvoke.net/default.aspx/user32/SetWindowPos.html找到它