我試圖調試一個巨大的Win32 GUI應用程序(我有完整的源代碼)分成幾個進程。問題如下:在一個進程中,我有一個對話框和一個列表框,當我雙擊列表框中的一個項目時,另一個進程開始創建自己的窗口,它被放在前面並覆蓋了初始對話框。如果我做了一些操作(我不能完全解釋,因爲我還沒有完全理解它們),有些東西強制初始對話框在任務欄中開始閃爍。在哪些場合發送WM_ACTIVATE?
我想微軟間諜++和看到,每當我這樣做處理WM_ACTIVATE發送到對話框中,大多數時候它有這些參數:
fActive: WA_INACTIVE fMinimized:False hwndPrevious:(null)
,並在這些情況下,對話框不會開始閃爍。但偶爾一次參數是
fActive: WA_ACTIVE fMinimized:False hwndPrevious:(null)
並且恰好對應於對話框閃爍。
MSDN says WM_ACTIVATE發送與WA_ACTIVE當窗口是比鼠標點擊一些其它方法激活(例如,通過向SetActiveWindow功能或通過使用鍵盤接口的呼叫來選擇窗口)。
現在在應用程序代碼中SetActiveWindow()永遠不會被調用,我不會對可以切換窗口的鍵盤做任何事情。
WM_ACTIVATE與WA_ACTIVE一起發送的原因是什麼?
關於我所說的話,如果是對話框,可以防止它被激活,您需要在OnInitDialog中返回FALSE,並且必須在沒有WS_VISIBLE樣式的情況下創建對話框,並且使用ShowWindow (SW_SHOWNA) – Hyksos 2010-10-12 22:10:44