有人能告訴我如何在MFC的Visual C++ 6.0中創建非模態對話框並顯示它嗎?我寫了這個代碼:如何顯示非模態CDialog?
CDialog dialog;
if (dialog.init(initialization values...))
dialog.DoModal();
但它阻止我的應用程序顯示對話框。我不知道是否有任何方法或其他方式來做到這一點。
謝謝
有人能告訴我如何在MFC的Visual C++ 6.0中創建非模態對話框並顯示它嗎?我寫了這個代碼:如何顯示非模態CDialog?
CDialog dialog;
if (dialog.init(initialization values...))
dialog.DoModal();
但它阻止我的應用程序顯示對話框。我不知道是否有任何方法或其他方式來做到這一點。
謝謝
您需要改爲撥打CDialog::Create
。完成對話後,您需要撥打DestroyWindow
。您可能還需要將對話框消息傳遞到對象上,但我不記得MFC是否會爲您處理這個問題。
使用CDialog ::創建,然後使用CDialog :: ShowWindow。您現在有一個無模式對話框。
DoModal正在阻止。你必須在堆上創建對話框或將其設置爲類的成員(這很重要),調用Create然後調用ShowWindow。
/* CChildDialog class is inherited from CDialog */
CChildDialog *m_pDialog = NULL;
// Invoking the Dialog
m_pDialog = new CChildDialog();
if (m_pDialog != NULL)
{
BOOL ret = m_pDialog->Create(IDD_CHILDDIALOG, this);
if (!ret) //Create failed.
{
AfxMessageBox(_T("Error creating Dialog"));
}
m_pDialog->ShowWindow(SW_SHOW);
}
// Delete the dialog once done
delete m_pDialog;
您可以撥打CDialog::Create
和CWnd::ShowWindow
像其他人所建議的。
另外,請記住您的對話框將在其創建後立即銷燬如果它存儲在局部變量中。
在這種情況下,我發現最方便的方法是讓它自己刪除自己來處理清理。
通常認爲這是一種糟糕的形式,可以讓「隱式」內存從類中釋放出來,而不是由它創建的內容釋放,但是我通常會爲非模態對話框設置例外。
即,
調用代碼:
#include "MyDialog.h"
void CMyApp::OpenDialog()
{
CMyDialog* pDlg = new CMyDialog(this);
if (pDlg->Create(IDD_MYDIALOG, this))
pDlg->ShowWindow(SW_SHOWNORMAL);
else
delete pDlg;
}
對話框代碼:
void CMapBasicDlg::OnDestroy()
{
CDialog::OnDestroy();
delete this; // Shown as non-modal, we'll clean up ourselves
}
刪除m_pDialog;它可能會使應用程序崩潰。 你可以調用m_pDialog-> DestroyWindow();刪除對話框。 – bala 2014-09-17 06:11:45
如果關閉它,對話框會自動刪除嗎? – Vinzenz 2014-11-07 10:30:55