MFC中,create dialog报错的问题

来源:百度知道 编辑:UC知道 时间:2024/06/30 16:06:53
在dialog中new一个子dialog,然后将子dialog删除,再new,就报错了.
1. m_dlgBasic.Create(IDD_BASIC_DIALOG, this);
2. m_dlgBasic.DestroyWindow();
3. 回头再执行1,就出错了.
请教是怎么回事?
父类对话框上有2个子类对话框,我是想点第1个同时删除第2个,点第2个的时候删除第一个.就是2个对话框只能显示一个.
现在出现个情况,在删除一个并显示另一个的时间差里,图象是白屏(父类dialog是蓝色背景)
-----------------------------
我试过,先显示再删除也有问题:(
-----------------------------
void CDlgButton::OnBasic()
{
CWnd *pWnd = GetParent();
CDlg *pDlg = (CDlg*)m_pDlg;
if (m_nFirst==1) pDlg->Destroy(0);//如果上一次是Basic
if (pDlg->m_pdlgBasic == NULL)
{
pDlg->m_pdlgBasic = new CDlgBasic;
pDlg->m_pdlgBasic->Create(IDD_DIALOG, pWnd);
.........
if (m_nFirst!=1) pDlg->Destroy(1);//如果上一次不是Basic
pDlg->m_pdlgBasic->SetWindowPos(&pWnd->wndBottom, 100, 53, 365, 500, 0);
pDlg->m_pdlgBasic->ShowWindow(SW_SHOW);
m_nFirst = 1;
}
}
void CDlg::OnDestroy(i

你需要从新再new,我也遇到过这种问题,具体原因需要查看MFC中的源代码.
while (1) {
new dialog
show dialog
delete dialog
}

执行第二步后就把它设置NULL了.根据NULL判断啊.

在哪里出错啊.怎么可能出错嘛.你自己要小心处理啊.
你delete 以后不要再m_pdlgBasic->anymemeber啊.

---------------------------------------------------------------------------------------------
我也不知道你的程序到底怎么了,不过我说的这种方法应该是可行的,因为我以前都是这样用过的.

我也不知道你的详细错误信息.如果你的代码不多发过来我给你调调..
---------------------------------------------------------------------------------------------
我想,如果你先显示第二个dialog再删除第一个dialog就不会出现白屏了.
---------------------------------------------------------------------------------------------
//你最好多发点代码过来,我不怎么明白 ,可以邮到xie_jian_jun@163.com
void CDlgButton::OnBasic()
{
CWnd *pWnd = GetParent();
CDlg *pDlg = (CDlg*)m_pDlg; //这个m_pDlg不知道是不是你所说的父对话框
if (m_nFirst==1) pDlg->Destroy(0);//不知道你这一句是否是delete pdlg->m_pdlgBasic
//我想知道你的Destroy这个成员函数的代码
if (pDlg->m