簡體   English   中英

GetWindowPlacement給出了不正確的窗口位置

[英]GetWindowPlacement gives the incorrect window position

如何使用Aero Snap功能查明窗口是否已調整大小? GetWindowPlacement函數提供最新的“恢復”窗口大小。 我用它如下:

WINDOWPLACEMENT wp = {};
wp.length = sizeof(WINDOWPLACEMENT);
::GetWindowPlacement( hWnd, &wp );

例如,它給出了wp.rcNormalPosition = {top=208 bottom=520 left=152 right=510} ,它應該是{top=0 bottom=1920 left=152 right=510}

請注意, GetWindowRect給出了完全相同的錯誤結果。 這是我的錯, GetWindowRect給出了正確的結果。

我需要在程序出口保存窗口狀態並在啟動時加載它,所以我需要知道如何放置窗口。 如何找出實際的窗口坐標?


好吧,我用notepad.exe (以及其他一些標准的Windows組件)進行了幾次測試,它以同樣的方式保存了它的狀態 - 它不記得它是否被“搶購”。 所以我認為這是Windows程序的預期行為。

AeroSnap只是窗口管理器發送給您的應用程序的另一種調整大小。 因此,您不會知道它是快照而不是任何其他類型的調整大小。

您可以期望的最好的方法是檢測在尺寸事件過程中已移動的相對邊緣。 您需要檢查高度或寬度是否已更改為與移動事件區分開來。

之所以沒有被告知這是一個突發事件的原因是很難想象為什么應用程序會關心調整大小的機制。


評論更多地揭示了您的問題。 您正在嘗試在應用關閉時保留應用的位置和大小,以便在重新啟動時恢復它。 您正在使用GetWindowPlacement()執行此操作,並且發現當最后一次調整Window的大小是Aero Snap時,它返回的位置不正確。

我自己的應用程序完全相同,我遇到了完全相同的問題。 我使用的解決方案是調用GetWindowRect()代替GetWindowPlacement()來獲取窗口位置和大小。 你聲明這對你失敗了,在這種情況下我不知道建議什么。 我必須說我覺得有點難以相信GetWindowRect()沒有返回正確的窗口rect。

暫無
暫無

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

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