在PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口如下:

1 BOOL CMainDlg::PreTranslateMessage(MSG* pMsg)
 2 {
 3     // TODO: Add your specialized code here and/or call the base class
 4     if ( pMsg->message == WM_LBUTTONDOWN)
 5     {
 6         GetWindowRect(m_oldRect);
 7         ::SetCapture(this->m_hWnd);
 8         m_bCanDrag = TRUE;
 9         m_lastPt = pMsg->pt ;
10     }
11     else if ( pMsg->message == WM_LBUTTONUP)
12     {
13         if( m_bCanDrag )
14         {
15             ::ReleaseCapture();
16             m_bCanDrag = FALSE;
17             GetWindowRect(m_newRect);
18             if (m_oldRect.EqualRect(m_newRect))
19             {
20                 GetMainItemID(pMsg);//调用对话框函数
21                 //return TRUE;
22             }
23         }
24     } 
25     else if( pMsg->message == WM_MOUSEMOVE)
26     {
27         if( m_bCanDrag )
28         {
29             CRect rc;
30             GetWindowRect(&rc);
31             rc.OffsetRect( pMsg->pt.x - m_lastPt.x , pMsg->pt.y - m_lastPt.y  ) ;
32             m_lastPt = pMsg->pt;
33             this->MoveWindow( rc );
34         }
35     }
36 
37     return CDialog::PreTranslateMessage(pMsg);
38 }

39  void CMainDlg::GetMainItemID(MSG* pMsg)
40 {
41     if (pMsg->hwnd == GetDlgItem( IDC_BTN_MYCOMPUTER )->m_hWnd)
42     {
43        CTestDlg dlg;
44        dlg.DoModal();
45     }
46 }

再单击对话框上的按钮时发送断言中断,具体位置如下:

::IsWindow(m_hWnd)
函数功能:该函数确定给定的窗口句柄是否标识一个已存在的窗口。
函数原型:BOOL IsWindow(HWND hWnd);
参数:
hWnd:被测试窗口的句柄。
返回值:如果窗口句柄标识了一个已存在的窗口,返回值为非零;如果窗口句柄未标识一个已存在窗口,返回值为零。

可能原因: 在PreTranslateMessage里的获取对应m_hWnd, DoModal()模态对话框退出后, m_hWnd 不是有效的窗口句柄。
解决办法: 处理完 WM_LBUTTONUP 后, 需要返回TRUE。

http://www.cppblog.com/wanghaiguang/archive/2013/12/05/204603.html

MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题相关推荐

  1. PreTranslateMessage(MSG* pMsg) 中 break 与return的区别

    程序一: BOOL CMyRichEditView::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg->me ...

  2. MFC 中PreTranslateMessage(MSG* pMsg)截获按钮和编辑框的消息进行预处理

    在类向导自动为对话框添加PreTranslateMessage(MSG* pMsg)函数: BOOL CjilutestDlg::PreTranslateMessage(MSG* pMsg) {    ...

  3. 函数右括号错误! PreTranslateMessage(MSG* pMsg)未返回

    我用一个模态对话框调dialog1用了另个一个模态对话框dialog2,dialog2只是简单的选择一个数值,然后就自动关闭.然后 ,dialog1使用dialog2的公有成员变量. 最后在这个函数结 ...

  4. 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现

    对话框程序中,如果不响应WM_KEYDOWN消息,可以通过重载PreTranslateMessage(MSG* pMsg)来实现 如下例: BOOL CShowImageDlg::PreTransla ...

  5. 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键

    第一种:如果要截获大键盘数字键和小键盘数字键,采用如下方案: PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg-&g ...

  6. PreTranslateMessage(MSG* pMsg)专题

    .. BOOL CQuickMosaicDlg::PreTranslateMessage(MSG* pMsg) {if (pMsg->message==WM_KEYDOWN) //键盘按下 {i ...

  7. CTrackThread::PreTranslateMessage(MSG* pMsg)

    MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来.只有穿过消息队列的消 ...

  8. JS中ShowModalDialog(模态窗口)详细使用

    基本介绍:           showModalDialog()         (IE 4+ 支持)           showModelessDialog()      (IE 5+ 支持) ...

  9. 在MFC,Win32程序中向控制台(Console)窗口输出调试信息

    在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...

最新文章

  1. mysql 数据操作 单表查询 where约束 between and or
  2. python对象模型 ruby_使用JRuby/Jython实现Ruby/Python的互操作性?
  3. CSS中提升优先级属性!important的用法总结
  4. 实例变量和静态变量(或类变量static)
  5. 10.27 noip模拟试题
  6. Linxu:磁盘分区
  7. 【PE】手动给PE文件添加一段代码MessageBoxA
  8. 树莓派智能小车python论文_基于树莓派循迹小车设计概述
  9. 密码学之现代密码通俗理解凯撒密码、 栅栏密码、 ROT5/13/18/47、维吉尼亚密码、 培根密码、 仿射密码
  10. Filename too long,Clone succeeded,but checkout failed.
  11. Apache FOP2.6 SVG导出PDF配置,解决中文字体变成####
  12. .net core添加word水印
  13. 前后端分离的文件上传,上传zip或者rar压缩包(vue+springboot)。
  14. 饥荒联机版专用服务器怎么修改小偷包,饥荒联机小偷背包代码 | 手游网游页游攻略大全...
  15. 在安装虚拟机时,”intel vt-x 处于禁用状态“ 如何解决
  16. mysql经典四表查询_sql 经典四表查询
  17. 游戏中的显示器选项的acm
  18. 《LINUX KERNEL MEMORY BARRIERS》
  19. c语言tab什么意思_我的C语言入门笔记。
  20. Jira4系列、Jira6系列破解实战

热门文章

  1. CSS3 仿古墓丽影9菜单界面
  2. jdk8新特性之出现This inspection finds all usages of methods that have @since tag in their documentation.
  3. mysql篇-sql查询语句-平均分、最高最低分、排序
  4. 店盈通:拼多多直通车推广怎么操作?技巧有哪些?
  5. zynqsd的读写数据_数据存储结构图 - Zynq7000 FPGA的高速信号采集处理平台的设计搭建以及后续拓展...
  6. 知物由学 | 一文读懂Android资源文件保护
  7. Windform C# Graphics绘图,消除锯齿
  8. 如何在Mac电脑中使用键盘移动操作鼠标焦点?如何在Mac中打开辅助键盘?
  9. 一个产品从0到1的完整流程
  10. loop与for loop分别实现乘法口诀表