对话框类不能实例化,该怎么解决

对话框类不能实例化
我新建了一个对话框类CMyDlg,基于CDialog
然后在CMyView里面调用:
CMyDlg   dlg;
CString   strTmp;
dlg.DoModal();
dlg.m_Combol.GetWindowTextA(strTmp);
...
运行出现问题,
跟踪发现把断点设在   dlg.m_Combol.GetWindowTextA(strTmp);
发现dlg的m_hWnd=00000000;
也就是没有分配内存,
请问这是由什么引起的?以前没有遇到过这样的问题!

------解决方案--------------------
是你的combol没有分配内存
我用你的方法写了代码 跟踪到这条语句:
void CWnd::GetWindowText(CString& rString) const
{
-》这个m_hWnd是0 ASSERT(::IsWindow(m_hWnd));
但是这个m_hWnd是combol的成员变量。。
------解决方案--------------------
dlg.DoModal();之后dlg的内存就释放了吧。
=======================
不应该会释放啊,dlg应该是在这个函数结束时才会释放的啊
------解决方案--------------------
窗口已经结束了

------解决方案--------------------
dlg.DoModal();
dlg.m_Combol.GetWindowTextA(strTmp);
---
在DoModal之后,窗口已经关闭,所以m_hWnd为NULL
比较安全的做法是:
if (dlg.DoModal() == IDOK)
{
strTmp = dlg.m_strComBol; //m_strComBol是m_Combol上的文字
}
------解决方案--------------------
还是窗口对象和窗口句柄之间的问题啊
你可以通过dlg操作对话框窗口是因为对话框的窗口句柄与对话框对象关联在一起了
也就是说创建窗口时返回的句柄初始化了dlg的成员m_hWnd
但当dlg.DoModal返回以后窗口就不存在了, 唯一标识窗口存在的就是窗口句柄,窗口
不存在了那么窗口句柄肯定无效了。导致dlg的成员m_hWnd也就无效了为NULL
所以调试时句柄内容肯定为00000000,因为此时窗口已经OVER啦,对话框的窗口都没了
那依附在其上的小弟们(子控件)肯定也被销毁了,所以
dlg.m_Combol.GetWindowTextA(strTmp);
dlg.m_Combol肯定没问题

m_Combol.GetWindowTextA( strTmp )肯定会报错!!因为组合框子窗口已经随
对话框创口一起销毁了,不信你可以测试一下看 m_Combol.m_hWnd是否有效

你可以在DoModal返回之前先获得Combo Box 的值暂时保存起来,以后再用
因为虽然窗口没了但dlg对象还是有效的


------解决方案--------------------
ouyh12345与tiantangniao232正解。