CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  VC/MFC >  进程/线程/DLL

江湖救急,一个十分古怪的问题,我怀疑是MFC的bug,我是认真的,请达人过来帮手,谢谢.

楼主lanphaday(恋花蝶)2005-06-01 01:36:14 在 VC/MFC / 进程/线程/DLL 提问

我使用VC6+sp6,最近做工程时发现一个十分古怪的问题,在一个SDI项目(应该MDI也是)中,因定义了hotkey,所以重载了PreTranslateMessage函数以获得消息,这时发现在这个函数里弹出自定义的对话框之后出现Assert错误!跟踪进去,发现在tooltip.cpp里的FromHandle函数发生的.一开始以为自己程序的问题,所以做了一个测试的项目,如果也有这样的问题,代码如下:  
  BOOL   CMainFrame::PreTranslateMessage(MSG*   pMsg)    
  {  
  //   TODO:   Add   your   specialized   code   here   and/or   call   the   base   class  
  if(pMsg->message   ==   WM_CHAR)/////这里可以是任意消息,当然,最好是常见的.  
  {  
  // MessageBox("hahaha");  
  ///////////////////////////////////////  
   
  ////////////////////////////////  
   
  ///MFC的bug??  
  ///在PreTranslateMessage函数里弹出一个自定义对话框会出现错误???  
  CMyDlg   dlg;  
  dlg.DoModal();  
  }  
  return   CFrameWnd::PreTranslateMessage(pMsg);  
  }  
   
   
  其中CMyDlg是自定义的对话框类,极简单,完成是默认生成的.  
   
  各位请帮帮忙,救急啊!!!谢谢了,要测试项目的朋友请留下email,我发给你们,谢谢了. 问题点数:0、回复次数:8Top

1 楼dongfa(一桶江湖( http://www.codelive.net ))回复于 2005-06-01 09:47:41 得分 0

CMyDlg   dlg;  
      dlg.DoModal();  
      return   TRUE;   //   加上这句  
  }Top

2 楼zdingyi(游戏大王)回复于 2005-06-01 12:30:05 得分 0

关注中Top

3 楼lanphaday(恋花蝶)回复于 2005-06-01 13:05:51 得分 0

CMyDlg   dlg;  
      dlg.DoModal();  
      return   TRUE;   //   加上这句  
  }  
   
  为什么必须要返回?Top

4 楼weirdy(远古传说)回复于 2005-06-01 15:37:26 得分 0

dlg.DoModal()截住了界面消息,所以返回时原来的pMsg的内容已经更改了,消息,窗口句柄都不在是if以前的值了,而且窗口句柄应该是对话框里的子窗口的句柄,所以调用CFrameWnd::PreTranslateMessage(pMsg);  
  时pMsg的窗口句柄是个无效值(窗口已销毁)  
  Top

5 楼weirdy(远古传说)回复于 2005-06-01 15:43:07 得分 0

改成这样就OK了,  
  if   (pMsg->message   ==   WM_CHAR)  
  {  
                  MSG   msg   =   *pMsg;  
                  CMyDlg   dlg;  
                  dlg.DoModal();  
                  *pMsg   =   msg;  
  }  
  我估计是MFC保存了一个当前消息的结构来跟踪消息路由,dlg.DoModal();时这个结构的值都更新好多遍了Top

6 楼dongfa(一桶江湖( http://www.codelive.net ))回复于 2005-06-02 09:46:11 得分 0

因为模式对话框有独立的消息循环.  
  Top

7 楼gooyan(超级替补)回复于 2005-06-02 10:11:41 得分 0

不要破坏消息循环,否则会挂死的Top

8 楼aben456(金珠MERP)回复于 2005-06-02 10:22:21 得分 0

有道理Top

相关问题

  • 救急!救急!
  • 救急,救急
  • 救急!救急!
  • 急救!急救!急救!急救!急救!急救!急救!急救!
  • 救急!!!!!!!
  • 救急!!!!!!
  • 救急!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  • 救急!!
  • 救急!!!
  • 救急!!!!!!!

关键词

  • 函数
  • 项目
  • 谢谢
  • pretranslatemessage
  • 自定义
  • cmydlg
  • 对话框
  • dlg
  • pmsg
  • 问题

得分解答快速导航

  • 帖主:lanphaday

相关链接

  • Visual C++类图书
  • Visual C++类源码下载

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo