簡體   English   中英

如何在Windows中最大化的窗口上無縫調用MoveWindow?

[英]How do I seamlessly call MoveWindow on a maximized window in Windows?

我有一個C#應用程序正在嘗試創建Windows Snap功能的可自定義版本。 我主要使用本機函數MoveWindowShowWindowAsync 我還使用GetWindowPlacement確定最大化/正常/最小化狀態。

我可以無縫地將“常規”窗口捕捉到用戶可定義的框架上。 窗口立即捕捉到新的所需位置和大小。

問題是當我從最大化過渡到正常時。 如果我僅調用MoveWindow,則窗口將捕捉到我想要的位置和大小。 但是,窗口仍然認為它是“最大化”的,這會導致嘗試重新最大化失敗。

但是,如果我先調用ShowWindowAsync(wnd, SW_SHOWNORMAL)然后再調用MoveWindow(wnd, x, y, width, height, true) ShowWindowAsync(wnd, SW_SHOWNORMAL) MoveWindow(wnd, x, y, width, height, true)它將使最大化的窗口動畫化為其舊位置,然后捕捉到其新位置。 這是非常刺耳和令人不快的。 嘗試翻轉呼叫順序或使用ShowWindow而不是ShowWindowAsync沒有幫助。

該問題的答案可能是禁用動畫。 我還沒有找到一種干凈的方法。

找到解決方案!

解決方法是調用SetWindowPlacement而不是MoveWindow SetWindowPlacement采用WINDOWPLACEMENT結構,該結構允許同時設置位置/大小和showCmd狀態。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM