如何显示非模态CDialog?

ruf*_*res 13 c++ mfc cdialog visual-c++

有人能告诉我如何在MFC的Visual c + + 6.0中创建非模态对话框并显示它吗?我写了这段代码:

CDialog dialog;
if (dialog.init(initialization values...))
   dialog.DoModal();
Run Code Online (Sandbox Code Playgroud)

但它阻止我的应用程序显示对话框.我不知道是否存在任何方法或其他方法.

谢谢

Ram*_*hna 17

/* 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;
Run Code Online (Sandbox Code Playgroud)


Goz*_*Goz 5

使用 CDialog::Create,然后使用 CDialog::ShowWindow。您现在有一个无模式对话框。


phi*_*hil 5

你可以打电话CDialog::CreateCWnd::ShowWindow就像其他人建议的那样。

另外,请记住,如果您的对话框存储在局部变量中,它将在创建后立即销毁


Jon*_*nas 5

在这种情况下,我发现让它自行删除以处理清理最方便。

通常认为从类内部释放“隐式”内存而不是它创建它的内容是不好的形式,但我通常为无模式对话框设置例外。

那是;

调用代码:

#include "MyDialog.h"

void CMyApp::OpenDialog()
{
    CMyDialog* pDlg = new CMyDialog(this);
    if (pDlg->Create(IDD_MYDIALOG, this))
        pDlg->ShowWindow(SW_SHOWNORMAL);
    else
        delete pDlg;
}
Run Code Online (Sandbox Code Playgroud)

对话代码:

void CMapBasicDlg::OnDestroy()
{
    CDialog::OnDestroy();
    delete this; // Shown as non-modal, we'll clean up ourselves
}
Run Code Online (Sandbox Code Playgroud)


Rob*_*Rob 3

你需要CDialog::Create改为打电话。DestroyWindow完成对话后,您需要致电。您可能还需要将对话框消息传递到对象上,但我不记得 MFC 是否为您处理这个问题。