MFC中,create dialog报错的问题
发布网友
发布时间:2023-09-24 15:09
我来回答
共2个回答
热心网友
时间:2024-12-12 16:49
你需要从新再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_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);
m_nFirst = 1; //这一句放在DoModal的前面.
pDlg->m_pdlgBasic->ShowWindow(SW_SHOW); //对于对话框,你应该调用DoModal()来显示
}
}
void CDlg::OnDestroy(int nID)
{
if ((m_pdlgBasic != NULL)&&((nID==2)||(nID==3)||(nID==4)||(nID==0)))
{
m_pdlgBasic->DestroyWindow();
delete m_pdlgBasic;
m_pdlgBasic = NULL;
}
}
热心网友
时间:2024-12-12 16:49
干嘛要一下建一下销的,直接隐藏/显示不就行了.