一位讀者問了這樣一個問題:
”
如果我創建了一個可見的模態對話框,卻對用戶來說不可用。舉個例子,假設我在程序中的其他位置收到一個事件,并且我從事件中調用模態 CDialog 上的 DestroyWindow。我注意到 OnDestroy 是在 CDialog 上調用的,但在將 WM_QUIT 消息發送到模態對話框的消息循環之前,DoModal 永遠不會退出。這會導致什么問題?不幸的是,我目前還真的沒有找到方法來避免這種情況。
”
實際上,我不確定這位讀者具體想問的問題是什么。如前所述,問題是”這會導致什么問題”
但他在自己的問題中回答了這個問題:導致的問題是: “DoModal 永遠不會退出,直到 WM_QUIT 消息發送到模態對話框的消息循環中為止。”
我猜想,他真正的問題是:”為什么銷毀窗口不起作用?”。
然后是后續問題: “關閉模式對話框的正確方法是什么?”
這個問題的第一個問題是,它假設我知道 CDialog 是什么。從它的名字來看,我將假設這是一個用于管理對話框的 MFC 類。但是,您甚至不必知道,就可以回答僅根據 Win32 原則的第一個問題:
DestroyWindow 不是退出模態對話框的方式,而應該使用 EndDialog 退出模式對話框。
DestroyWindow 技術適用于非模態對話框。
但是,讓我們從另一個角度來看這個問題,這就是我今天的觀點:你有 MF C源代碼。不要害怕閱讀它。特別是因為我個人不使用 MFC,我甚至不知道使用 MFC 進行應用程序設計的基本原理,我一直都是在 Win32 上工作。因此,我不知道答案,但閱讀 MFC 源代碼的 15 分鐘很快就揭示了銷毀窗口不起作