对话框退出时出现断言错误

dzy198239 2010-12-17 01:37:42
我建立了一个基于对话框的MFC应用程序,想在对话框上显示flash,因此在对话框上添加了Shockwave flash object。我想当点击flash图像时,弹出一个对话框,于是我新建了一个继承自CShockwaveFlash的类,并在该类的头文件中添加了消息处理映射机制。并增加了函数 virtual BOOL PreTranslateMessage(MSG* pMsg); 在该类的实现文件中添加了如下代码:

BOOL CShockwaveFlash1::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_LBUTTONUP)
{
CMyNewDlg dlg;
dlg.DoModal();
return TRUE;
}
return FALSE;
}

但是当点击对话框dlg的确定按钮(即对话框的默认按钮)来关闭该对话框时,弹出了断言错误,跟错错误,发现出现错误的代码为 wincore.cpp 的886行,即:ASSERT(::IsWindow(m_hWnd));

请各位大侠帮我分析分析,谢谢了。
...全文
149 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
向立天 2010-12-17
  • 打赏
  • 举报
回复
不加return就会继续执行基类的PreTranslateMessage
然后继续处理消息
至于为什么会出错那就要要看继续处理的时候你的相关设置是不是有冲突了
dzy198239 2010-12-17
  • 打赏
  • 举报
回复
找到原因了。
我程序上的代码为
BOOL CShockwaveFlash1::PreTranslateMessage(MSG* pMsg)
{
if(pMsg->message==WM_LBUTTONUP)
{
CMyNewDlg dlg;
dlg.DoModal();
}
return FALSE;
}
if 函数体内没有加return TRUE;
我上面提问时加上了return TRUE; 抱歉,哈哈。
为什么if函数体内不加return TRUE就错呢。
向立天 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 happyparrot 的回复:]
现在没有人说你这个CMyNewDlg有问题,说的都是其他的问题。真是晕啊。
由于你按OK后,CMyNewDlg的使用就结束了,它本身没有问题,但随后PreTranslateMessage事件的处理也结束了,后续就会执行你对话框的初始化函数等处理,这些都发生在你点击OK后,所以你认为是这个CMyNewDlg的毛病,但以上所有人的回复,都把问题指向你后续的代码的问题,而且也告诉你如何去判断了。
不……
[/Quote]看看掉用堆栈先定位问题代码才好分析
快乐鹦鹉 2010-12-17
  • 打赏
  • 举报
回复
现在没有人说你这个CMyNewDlg有问题,说的都是其他的问题。真是晕啊。
由于你按OK后,CMyNewDlg的使用就结束了,它本身没有问题,但随后PreTranslateMessage事件的处理也结束了,后续就会执行你对话框的初始化函数等处理,这些都发生在你点击OK后,所以你认为是这个CMyNewDlg的毛病,但以上所有人的回复,都把问题指向你后续的代码的问题,而且也告诉你如何去判断了。
不妨你在CShockwaveFlash1类的初始化或者其它刚启动时需要执行的函数中增加代码,看看断言是因何而起。最简单的就是看堆栈的顶部,就知道错误的入口了。
dzy198239 2010-12-17
  • 打赏
  • 举报
回复
我试过,在主对话框类中添加代码:
CMyNewDlg dlg;
dlg.DoModal();
不会出现该问题,但是在我新建的这个继承自CShockwaveFlash的新类中添加这两句代码,当点击确定按钮来关闭dlg时则出现上面所说的断言错误。高手们请帮我想想是怎么回事。
bragi523 2010-12-17
  • 打赏
  • 举报
回复
堆栈看看你的程序错在哪
zzw820626 2010-12-17
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 happyparrot 的回复:]
你在return TRUE;处加断点,看看错误是否是CMyNewDlg对话框DoModal结束造成的,还是根本和它无关。
[/Quote]
++
快乐鹦鹉 2010-12-17
  • 打赏
  • 举报
回复
估计是这个PreTranslateMessage结束之后,你的其它的代码出现的问题。可以在出现断言时查看堆栈,找到实际的顶部错误代码,也就是错误入口处,就比较好解决问题了。
ouyh12345 2010-12-17
  • 打赏
  • 举报
回复
回溯啊,跟踪到自己的代码里
可能是某个窗口关闭了,但还是向这个窗口发消息
yihandrensunyong 2010-12-17
  • 打赏
  • 举报
回复
不要RETURN TRUE直接RETURN
快乐鹦鹉 2010-12-17
  • 打赏
  • 举报
回复
你在return TRUE;处加断点,看看错误是否是CMyNewDlg对话框DoModal结束造成的,还是根本和它无关。

16,472

社区成员

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

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

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