SetWindowPos不会更改最大化状态

时间:2013-01-10 15:53:02

标签: c# .net window pinvoke

我们正在使用SetWindowPos,设置窗口的位置并且效果很好。

我对它的唯一质疑是,如果我们移动的窗口最大化,那么它将移动并变为合适的大小,但是,它仍将相信自己处于最大化状态,并继续显示“恢复”按钮。

一旦调用了SetWindowPos,是否有办法告诉该窗口替换最大化按钮?

另请注意:这些窗口不一定是Windows窗体,但可能是Explorer,Chrome,Firefox,Notepad等应用程序。

这是我们对SetWindowPos的调用:

PInvokeMethods.SetWindowPos( hwnd, 0, position.Left + x, position.Top + y, position.Width, position.Height, PInvokeMethods.SWP_NoZOrder | PInvokeMethods.SWP_NoActivate);

3 个答案:

答案 0 :(得分:4)

如果您想在一次通话中设置状态和排名,则可以使用SetWindowPlacement API。

首先,您可以调用GetWindowPlacement来填充当前值的WINDOWPLACEMENT结构。然后,您将修改showCmdrcNormalPosition成员。然后,您将在SetWindowPlacement处重新启动已修改的结构。

答案 1 :(得分:3)

在尝试更改位置之前,您可以尝试使用SW_SHOWNORMAL致电ShowWindow

答案 2 :(得分:0)

SetWindowPos不会更改窗口状态(仅限其位置)。

请改用SetWindowPlacement,并在SHOWCmd成员设置为SW_SHOWMAXIMIZED的情况下完成WindowPlacement结构(http://msdn.microsoft.com/en-us/library/windows/desktop/ms632611(v=vs.85).aspx