我都遵循这个问题做一个非模态/非模态对话框: How to display a non-modal CDialog?如何检测无模式CDialog是否已关闭?
我使用MFC/C++在VS2008。我比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;
我是否需要,如果对话框已被释放,以保持监控?关闭对话框时是否触发了父窗体?
只需为WM_DESTROY添加一个消息处理程序来重置指针。 – 2012-08-08 17:40:18