模态://创建
CDialog dlg;
dlg.DoModal();
//销毁
dlg.EndDialog;非模态://创建
CDialog* pDlg=new CDialog;
pDlg->Create(...);
pDlg->ShowWindow();
//销毁
pDlg->DestroyWindow();
delete pDlg;MSDN很详细的了
CDialog dlg;
dlg.DoModal();
//销毁
dlg.EndDialog;非模态://创建
CDialog* pDlg=new CDialog;
pDlg->Create(...);
pDlg->ShowWindow();
//销毁
pDlg->DestroyWindow();
delete pDlg;MSDN很详细的了
void CTestDlg1::OnOK()
{
CDialog::OnOK();
DestroyWindow();
}
void CTestDlg1::OnCancel()
{
CDialog::OnCancel();
DestroyWindow();
}
void CTestDlg1::OnDestroy() //添加WM_DESTORY消息相应的函数
{
CDialog::OnDestroy();
AfxMessageBox("call delete this");
delete this; //这步要出错
}
在网上看到最简单的方法,但为什么失败呢?根本不能delete自己啊
C++基本的内存申请释放是怎么说的?
你用了new在堆栈上动态申请了内存才用delete释放
而你的Dialog是一个临时变量CAttributesDlg AtbDlg;
掉用完后内存会被自动回收的,不用你操心。
还有CDialog的OnOK已经把窗口销毁了,你再去调用DestroyWindow()销毁,是多此一举。
MFC代码都是开源的,可以进去看看你就明白了。
private:
CMyDialog m_dlg;
//....在需要调用此窗口的地方使用IsWindow先判断再决定是否创建:
if (!IsWindow(m_dlg.m_hWnd))
{
m_dlg.Create(IDD_MYDLG, NULL); //创建对话框
}
m_dlg.ShowWindow(SW_SHOW);//显示对话框