2011-09-26 77 views
1

一個給定的外部(未由當前進程所擁有的)窗口(hWnd)首先最小化,那麼隱藏的:ShowWindowAsync不激活一個隱藏+最小化窗口?

ShowWindowAsync(hWnd, SW_MINIMIZE); 
// wait loop inserted here 
ShowWindowAsync(hWnd, SW_HIDE); 

以下調用正確它恢復到未最小化(恢復)狀態:

ShowWindow(hWnd, SW_RESTORE); 

然而,這個電話沒有:

ShowWindowAsync(hWnd, SW_RESTORE); 

在第二種情況下與ShowWindowAsync()中,窗口未被最小化並且不再隱藏,但未被激活(保留在其他現有窗口之後)。相反,第一個ShowWindow()調用會正確激活該窗口。

這是預期的行爲? 如何在不依賴ShowWindow()(同步(阻塞))的情況下恢復窗口(到前臺)?(該示例中的等待循環可具有超時,而ShowWindow()不允許超時的規範。)

(操作系統SP3)

+0

呼叫的ShowWindow()+ SetForegroundWindow()。 –

+0

@HansPassant:這是一個阻塞(同步)調用,我試圖避免。 – Unsigned

回答

1

這裏的溶液作爲用於:

ShowWindowAsync(hWnd, SW_SHOW); 
// wait loop inserted here 
ShowWindowAsync(hWnd, SW_RESTORE); 

這基本上用來隱藏窗口的片段的反轉:

ShowWindowAsync(hWnd, SW_MINIMIZE); 
// wait loop inserted here 
ShowWindowAsync(hWnd, SW_HIDE); 
1

ShowWindowAsync職位顯示窗口事件給定的消息隊列窗口。特別是,窗口顯示的是它的線程,而不是你的線程。不同之處在於你的線程是前臺線程,因此可以激活另一個窗口,而這個窗口本身不能執行。