2015-06-25 178 views
1

我有一個無模式對話框,當我關閉主應用程序時,有時會在屏幕上留下對話框。如果我手動關閉它,所有析構函數都會正確調用。但是到目前爲止,如果我試圖通過C++代碼來實現,我在Debug版本中遇到了問題,這些問題不能讓我對Release版本中發生的事情充滿信心。如何在C++中關閉無模式MFC對話框

什麼是關閉模型對話框的正確方法? PostQuitMessage()的文檔指出它關閉了整個線程(是在單獨的線程中運行的非模態對話框,或者是單個MFC應用程序UI線程的一部分?)。撥打DestroyWindow()在實踐中給我提出了問題。發送WM_CLOSE並不覺得是正確的。而CWnd::EndDialog()僅適用於模態對話框。在這些......或其他地方是否有正確的答案?

回答

0

請參閱CDialog的MSDN頁面。該頁面的最後一段提供了關閉無模式對話框的詳細說明。

+0

啊等 - 接受你的答案太快了,因爲我以爲我找到了一個金礦......但它沒有說你如何調用OnCancel()函數 - 直接調用它,發送WM_CANCEL到窗口,或者是WM_CLOSE ...? – omatai

+0

OnCancel響應用戶操作。你可以直接調用它,但在簡單的情況下,它只需調用DestroyWindow,所以你可以直接調用它。 –

0

我通常有一個指向我調用它的窗口的指針,並在它自己的析構函數中刪除它。

void MainWindowDlg::OnUserAction(void) 
{ 
    ModelessDialog *dlg = new ModelessDialog(parentCwnd); //Or 'this' 
    //Or use a member variable and set to nullptr afterwards... 
    //Create/Open it... 
    //Do not use the pointer again, as it can delete itself any time ! 
} 

void ModelessDialog::~ModelessDialog(void) 
{ 
    //Other cleanup if needed 
    delete this; 
} 

您仍然可以通過GetParent()->SendMessage與父母互動。