我已经按照这个问题制作了一个非模态/无模态对话框: 如何显示非模态 CDialog?
我在 VS2008 中使用 MFC/C++。我对 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;
如果对话框已被处理,我是否需要继续监控?关闭对话框时是否有事件触发到父窗体?