在View中创建的NewDialog对象,DoModal()正常,在结束时(OK/CANCEL/直接关闭窗口)出现问题:
Debug Assertion Failed!
重载OnOK(),删掉CDialog::OnOK();,换成
EndDialog(1);
仍然还是Debug Assertion Failed
请教大虾,代码如下:
/////////////////CView.cpp
void COpenimage4View::On123() //一个菜单选项
{
if(flag==0){ //flag设为View成员,标志是否已经创建Dialog对象
NewDialog newdialog;
flag=1;
newdialog.m_updata=0; //Dialog成员初始化
newdialog.m_leftdata=0;
newdialog.m_rightdata=0;
newdialog.m_downdata=0;
newdialog.DoModal();
newdialog.UpdateData(TRUE);
}
else{
NewDialog* viewdialog=(NewDialog*)GetParent()->GetDlgItem(IDD_DIALOG1);
viewdialog->DoModal();
}
}
/////////////NewDialog.cpp
void NewDialog::OnOK()
{
// TODO: Add extra validation here
EndDialog(1);
//CDialog::OnOK();
}
Debug Assertion Failed!
重载OnOK(),删掉CDialog::OnOK();,换成
EndDialog(1);
仍然还是Debug Assertion Failed
请教大虾,代码如下:
/////////////////CView.cpp
void COpenimage4View::On123() //一个菜单选项
{
if(flag==0){ //flag设为View成员,标志是否已经创建Dialog对象
NewDialog newdialog;
flag=1;
newdialog.m_updata=0; //Dialog成员初始化
newdialog.m_leftdata=0;
newdialog.m_rightdata=0;
newdialog.m_downdata=0;
newdialog.DoModal();
newdialog.UpdateData(TRUE);
}
else{
NewDialog* viewdialog=(NewDialog*)GetParent()->GetDlgItem(IDD_DIALOG1);
viewdialog->DoModal();
}
}
/////////////NewDialog.cpp
void NewDialog::OnOK()
{
// TODO: Add extra validation here
EndDialog(1);
//CDialog::OnOK();
}
NewDialog newdialog;
flag=1;
newdialog.m_updata=0; //Dialog成员初始化
newdialog.m_leftdata=0;
newdialog.m_rightdata=0;
newdialog.m_downdata=0;
newdialog.DoModal();
newdialog.UpdateData(TRUE);
} 上面代码中,红色部分写的有问题,在DoModal后面,你又写了一句UpdateData,这是不对的
因为DoModal之后,窗口就已经销毁了,结果你又去UpdateData,肯定要出错的。
直接把UpdateData删掉,然后把你那个OnOK函数给改一下,EndDialog去掉,CDialog::OnOK()的注释去掉,就可以了。