2011-05-31 194 views
3

我有一個相對簡單的Window類。我創建了一個窗口,關聯了我的this等等。現在,後來我拋出了一個異常來指出問題。當我呼叫MessageBox彈出錯誤時,程序崩潰,因爲它試圖調用我的Window Proc。現在,我的意思是,無可否認,我在這裏失敗了SRP,只是寫了一個簡短的擁有自己的HWND類將解決這個問題,因爲窗口沒有正確清理。然而,我真的很困惑,爲什麼它試圖在我的MessageBox調用中處理窗口消息 - 所有者參數是nullptr。有什麼建議麼?消息框發送Windows消息?

編輯:如果我恰當地調用DestroyWindow,那麼現在消息框不顯示,儘管應用程序不會崩潰。它只適用於我從窗口手動刪除this,所以如果proc被調用,它將轉發到DefWindowProc,然後DestroyWindow。我的意思是,我認爲如果你沒有一個所有者就叫MessageBox,那麼無論你對系統中的其他窗口做了什麼,它都可以工作。

回答

4

這裏發生的情況是,當您顯示消息框時,隊列中的潛伏窗口仍有消息。消息框運行模式窗口消息泵併發送麻煩的消息。請記住,從同一個線程創建的所有窗口共享一個消息隊列。

我不知道如何解決您的問題,但這是怎麼回事。

順便說一句,傳遞一個空主人並不是一個好主意,因爲它會導致你的消息框在主應用程序被最小化時不會被最小化,例如。

+0

它只是用於終止或'printf'調試,所以不好的行爲不是問題。 – Puppy 2011-05-31 19:51:15

+0

@deadmg好的,我明白了 – 2011-05-31 19:54:21