对话框类不能实例化

xyliang230 2007-09-12 10:35:52
我新建了一个对话框类CMyDlg,基于CDialog
然后在CMyView里面调用:
CMyDlg dlg;
CString strTmp;
dlg.DoModal();
dlg.m_Combol.GetWindowTextA(strTmp);
...
运行出现问题,
跟踪发现把断点设在 dlg.m_Combol.GetWindowTextA(strTmp);
发现dlg的m_hWnd=00000000;
也就是没有分配内存,
请问这是由什么引起的?以前没有遇到过这样的问题!
...全文
201 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
hahabaker 2007-09-13
  • 打赏
  • 举报
回复
是你的combol没有分配内存
我用你的方法写了代码 跟踪到这条语句:
void CWnd::GetWindowText(CString& rString) const
{
-》这个m_hWnd是0 ASSERT(::IsWindow(m_hWnd));
但是这个m_hWnd是combol的成员变量。。
zhuwuwei 2007-09-13
  • 打赏
  • 举报
回复
ouyh12345与tiantangniao232正解。
tiantangniao232 2007-09-13
  • 打赏
  • 举报
回复
还是窗口对象和窗口句柄之间的问题啊
你可以通过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对象还是有效的

真相重于对错 2007-09-13
  • 打赏
  • 举报
回复
上面的是另外一贴
真相重于对错 2007-09-13
  • 打赏
  • 举报
回复
你是什么项目??ide版本多少??

我在vc++ 2000 mfc 工程下用没问题
真相重于对错 2007-09-13
  • 打赏
  • 举报
回复
你可以用ddx
wltg2001 2007-09-13
  • 打赏
  • 举报
回复
CDialog 只是对话框的封装类,不是实际的对话框。实际的对话框,在你关闭对话框后,释放了。
============================
这个说法看起来有点道理
ouyh12345 2007-09-13
  • 打赏
  • 举报
回复
dlg.DoModal();
dlg.m_Combol.GetWindowTextA(strTmp);
---
在DoModal之后,窗口已经关闭,所以m_hWnd为NULL
比较安全的做法是:
if (dlg.DoModal() == IDOK)
{
strTmp = dlg.m_strComBol; //m_strComBol是m_Combol上的文字
}
真相重于对错 2007-09-13
  • 打赏
  • 举报
回复
CDialog 只是对话框的封装类,不是实际的对话框。实际的对话框,在你关闭对话框后,释放了。
真相重于对错 2007-09-13
  • 打赏
  • 举报
回复
窗口已经结束了
xyliang230 2007-09-13
  • 打赏
  • 举报
回复
但是它的m_hwnd=0
wltg2001 2007-09-13
  • 打赏
  • 举报
回复
dlg.DoModal();之后dlg的内存就释放了吧。
=======================
不应该会释放啊,dlg应该是在这个函数结束时才会释放的啊
xyliang230 2007-09-13
  • 打赏
  • 举报
回复
dlg.DoModal();之后dlg的内存就释放了吧。那这样他的成员变量也应如此。我跟踪到dlg里面,m_combol确实分配过内存。但是在dlg.DoModal();之后就释放了。
xyliang230 2007-09-13
  • 打赏
  • 举报
回复
谢谢 大家,尤其是tiantangniao232() ,ouyh12345,hdt(倦怠)
我的问题解决了。事先把m_combol值获得!
窗口和对象之间的关系没有搞清楚,还是基础薄弱啊!
xyliang230 2007-09-12
  • 打赏
  • 举报
回复
已经初始化了,不是这个问题
而是dlg根本没有分配内存
不知是什么原因
GeoPeeker 2007-09-12
  • 打赏
  • 举报
回复
这个可能是你的那个m_Combol变量没有初始化就使用了

16,470

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧