我都遵循這個問題做一個非模態/非模態對話框: How to display a non-modal CDialog?如何檢測無模式CDialog是否已關閉?
我使用MFC/C++在VS2008。我比C#和.net的流暢度高於MFC和C++。
我有一個菜單項在我的表單啓動對話框。只能有一個打開的對話框實例。該對話框顯示正常。我可以通過點擊拐角處的X來關閉它,當我關閉主窗體時它會關閉。我遇到的問題是在單擊X關閉對話框後無法再次打開對話框。我知道這是因爲指針永遠不會回到NULL。
我有這個在我的窗體的頭文件:
CChildDialog *m_pDialog;
我有這部分我的窗體構造函數:
m_pDialog = NULL;
當我在菜單項的驗證碼菜單項點擊方法(我從另一個SO修改它,因爲我只想要打開一個對話框的實例):
if(m_pDialog == NULL)
{
// Invoking the Dialog
m_pDialog = new CChildDialog();
BOOL ret = m_pDialog->Create(IDD_CHILDDIALOG, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pDialog->ShowWindow(SW_SHOW);
}
現在我知道我需要執行此部分,並設置指針爲NULL,但我不知道在哪裏把這個:
// Delete the dialog once done
delete m_pDialog;
m_pDialog = NULL;
我是否需要,如果對話框已被釋放,以保持監控?關閉對話框時是否觸發了父窗體?
只需爲WM_DESTROY添加一個消息處理程序來重置指針。 – 2012-08-08 17:40:18