簡體   English   中英

如何顯示非模式CDialog?

[英]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::CreateCWnd::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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM