[英]How to display a non-modal CDialog?
有人可以告訴我如何在MFC的Visual c ++ 6.0中創建非模態對話框並將其顯示嗎? 我寫了這段代碼:
CDialog dialog;
if (dialog.init(initialization values...))
dialog.DoModal();
但這阻止了我的應用程序顯示對話框。 我不知道是否存在任何方法或其他方式來做到這一點。
謝謝
/* 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
。
另外,請記住,如果將對話框存儲在本地變量中,則對話框將在創建后立即銷毀 。
使用CDialog :: Create,然后使用CDialog :: 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
}
您需要改為調用CDialog::Create
。 完成對話框后,將需要調用DestroyWindow
。 您可能還需要將對話框消息傳遞到該對象上,但我不記得MFC是否為您處理此消息。
DoModal正在阻止。 您必須在堆上創建對話框或使其成為類的成員(這很重要),先調用Create,再調用ShowWindow。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.