MyException - 我的异常网
当前位置:我的异常网» VC/MFC » 关于SetParent的有关问题

关于SetParent的有关问题

www.MyException.Cn  网友分享于:2013-04-06  浏览:26次
关于SetParent的问题
本帖最后由 liuzpzp007 于 2013-03-27 10:08:29 编辑
新人请教:

建立一个基于对话框的工程,主对话框类为CDialog1。然后再插入一个对话框CDialog2.
在CDialog1头文件中,加入成员变量CDialog2  m_dlg;
现在我要实现在CDialog1显示之前先显示CDialog2. 
在InitInstance()函数中,修改代码为:
CDialog1   dlg;
dlg.m_dlg.SetParent(&dlg);
dlg.m_dlg.Create(IDD_DIALOG2,&dlg);
dlg.m_dlg.ShowWindow(SW_SHOW);
dlg.m_dlg.UpdateWindow();

m_pMainWnd=&dlg;
int nResponse=dlg.DoModal();

现在这句话有问题dlg.m_dlg.SetParent(&dlg)。错误就出在这句上。想知道是为什么。
注意:我这个程序是仿造别人的能够正常运行的程序,为什么我仿照过来就不能正常了。。

网上有人也遇到类似问题,他用一下方法解决:
dlg.m_dlg.SetParent(&dlg);
dlg.m_dlg.Create(IDD_DIALOG2,&dlg);

你试试这两句的顺序换一下,先
dlg.m_dlg.Create(IDD_DIALOG2,&dlg);

dlg.m_dlg.SetParent(&dlg);

但我的还是不行?

调试时出错,点重试进入:AFXWIN2.INL:
{ ASSERT(::IsWindow(m_hWnd)); return CWnd::FromHandle(::SetParent(m_hWnd,
pWndNewParent->GetSafeHwnd())); }


然后找到这个帖子:
http://bbs.csdn.net/topics/20268542
我怀疑是FromHandle出错导致,

改为Release试一下,居然没事,回去Debug问题照旧?
百思不得其解啊!

------解决方案--------------------
你SetParent()的时候,你的父窗口还没有创建出来(你的父窗口是DoModal()出来的),所以肯定错误。
你直接在InitInstance()中
CDialog2 dlg2;
dlg2.Create(CDialog2::IDD);
dlg2.ShowWindow(SW_SHOW);
...
CDialog1 dlg;
m_pMaindWnd = &dlg;
dlg.DoModal();

文章评论

软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有