如何在Windows中的最大化窗口上无缝调用MoveWindow?

时间:2018-03-26 03:05:00

标签: c# windows

我有一个C#应用程序试图创建Windows's Snap功能的可自定义版本。我主要使用原生函数MoveWindowShowWindowAsync。我还使用GetWindowPlacement来确定最大化/正常/最小化状态。

我可以无缝地拍摄正常的"窗口周围到我的用户可定义框架。窗口立即捕捉到新的所需位置和大小。

问题是当我从最大化转变为正常时。如果我只调用MoveWindow,那么窗口会捕捉到我想要的位置和大小。然而,窗口仍然认为它已经最大化了#34;这导致尝试重新最大化失败。

但是,如果我调用ShowWindowAsync(wnd, SW_SHOWNORMAL)后跟MoveWindow(wnd, x, y, width, height, true),则会使最大化窗口为其旧位置设置动画,然后捕捉到新位置。这非常令人不快和不愉快。尝试翻转通话订单或使用ShowWindow代替ShowWindowAsync无效。

这个问题的答案可能是禁用动画。我没有找到一个干净的方法来做到这一点。

1 个答案:

答案 0 :(得分:0)

找到解决方案!

修复方法是调用SetWindowPlacement而不是MoveWindowSetWindowPlacement采用WINDOWPLACEMENT结构,允许同时设置位置/大小和showCmd状态。