我想知道,为了将Win32 API 20 px向右移动(ms-windows-)窗口向下移动40 px,以下 函数调用将是如何做到的:
SetWindowPos(
/* hWnd */ hChildDlg2,
/* hWndInsertAfter */ (HWND) -1,
/* X */ 20,
/* Y */ 40,
/* cx */ -1,
/* cy */ -1,
/* uFlags */ SWP_NOSIZE | // Ignore cx, cy
SWP_NOZORDER // and hWndInsertAfter
);
我问,因为在我看来,可能只有HWND
以及x
和y
作为参数的功能。
答案 0 :(得分:4)
是的,这几乎就是它的完成方式。您应该更喜欢使用SetWindowPos()
,因为它可以让您对窗口的移动/调整大小有很大的控制。
我通常像这样使用它(我写的一个小框架的一部分):
// Window member function
void Window::Move(int x, int y)
{
if(hwnd != 0)
{
::SetWindowPos(hwnd, 0, x, y, 0, 0,
SWP_NOZORDER | SWP_NOSIZE | SWP_NOACTIVATE);
}
}
还有一个MoveWindow()
函数可以完成同样的功能。使用SetWindowPos()
功能,it's now more of a convenience function than anything else。
答案 1 :(得分:1)
是的,这是正常的方式,窗口会收到WM_WINDOWPOSCHANGING
消息(参数已更改)还有较旧的MoveWindow
,但它不太灵活,实际上会强制您设置大小。
要正确保存和恢复窗口大小,您应分别使用GetWindowPlacement
和SetWindowPlacement
。
答案 2 :(得分:0)
你的意思是MoveWindow
?
它需要hwnd,x,y,width,height,因为没有SWP_NOSIZE
标志,使用它来移动窗口实际上更复杂,因为你还需要获取大小。