我有一个C#应用程序试图创建Windows's Snap功能的可自定义版本。我主要使用原生函数MoveWindow和ShowWindowAsync。我还使用GetWindowPlacement来确定最大化/正常/最小化状态。
我可以无缝地拍摄正常的"窗口周围到我的用户可定义框架。窗口立即捕捉到新的所需位置和大小。
问题是当我从最大化转变为正常时。如果我只调用MoveWindow,那么窗口会捕捉到我想要的位置和大小。然而,窗口仍然认为它已经最大化了#34;这导致尝试重新最大化失败。
但是,如果我调用ShowWindowAsync(wnd, SW_SHOWNORMAL)
后跟MoveWindow(wnd, x, y, width, height, true)
,则会使最大化窗口为其旧位置设置动画,然后捕捉到新位置。这非常令人不快和不愉快。尝试翻转通话订单或使用ShowWindow
代替ShowWindowAsync
无效。
这个问题的答案可能是禁用动画。我没有找到一个干净的方法来做到这一点。
答案 0 :(得分:0)
找到解决方案!
修复方法是调用SetWindowPlacement
而不是MoveWindow
。 SetWindowPlacement
采用WINDOWPLACEMENT
结构,允许同时设置位置/大小和showCmd
状态。