MFC PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口问题
在PreTranslateMessage(MSG* pMsg)中调用DoModal()模态窗口如下:
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 }
再单击对话框上的按钮时发送断言中断,具体位置如下:
可能原因: 在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()模态窗口问题相关推荐
- PreTranslateMessage(MSG* pMsg) 中 break 与return的区别
程序一: BOOL CMyRichEditView::PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg->me ...
- MFC 中PreTranslateMessage(MSG* pMsg)截获按钮和编辑框的消息进行预处理
在类向导自动为对话框添加PreTranslateMessage(MSG* pMsg)函数: BOOL CjilutestDlg::PreTranslateMessage(MSG* pMsg) { ...
- 函数右括号错误! PreTranslateMessage(MSG* pMsg)未返回
我用一个模态对话框调dialog1用了另个一个模态对话框dialog2,dialog2只是简单的选择一个数值,然后就自动关闭.然后 ,dialog1使用dialog2的公有成员变量. 最后在这个函数结 ...
- 对话框不响应WM_KEYDOWN消息,可以通过重载BOOL PreTranslateMessage(MSG * pMsg)来实现
对话框程序中,如果不响应WM_KEYDOWN消息,可以通过重载PreTranslateMessage(MSG* pMsg)来实现 如下例: BOOL CShowImageDlg::PreTransla ...
- 使用PreTranslateMessage(MSG* pMsg)截获键盘数字键
第一种:如果要截获大键盘数字键和小键盘数字键,采用如下方案: PreTranslateMessage(MSG* pMsg) { // TODO: 在此添加专用代码和/或调用基类 if (pMsg-&g ...
- PreTranslateMessage(MSG* pMsg)专题
.. BOOL CQuickMosaicDlg::PreTranslateMessage(MSG* pMsg) {if (pMsg->message==WM_KEYDOWN) //键盘按下 {i ...
- CTrackThread::PreTranslateMessage(MSG* pMsg)
MFC消息控制流最具特色的地方是CWnd类的虚拟函数PreTranslateMessage(),通过重载这个函数,我们可以改变MFC的消息控制流程,甚至可以作一个全新的控制流出来.只有穿过消息队列的消 ...
- JS中ShowModalDialog(模态窗口)详细使用
基本介绍: showModalDialog() (IE 4+ 支持) showModelessDialog() (IE 5+ 支持) ...
- 在MFC,Win32程序中向控制台(Console)窗口输出调试信息
在MFC程序中输出调试信息的方法有两种,一种是使用TRACE宏,可以向Output窗口输出调试信息:另一种是用MessageBox,弹出消息框来输出调试信息,但会影响程序的运行. 其实有一种方法可以更 ...
最新文章
- mysql 数据操作 单表查询 where约束 between and or
- python对象模型 ruby_使用JRuby/Jython实现Ruby/Python的互操作性?
- CSS中提升优先级属性!important的用法总结
- 实例变量和静态变量(或类变量static)
- 10.27 noip模拟试题
- Linxu:磁盘分区
- 【PE】手动给PE文件添加一段代码MessageBoxA
- 树莓派智能小车python论文_基于树莓派循迹小车设计概述
- 密码学之现代密码通俗理解凯撒密码、 栅栏密码、 ROT5/13/18/47、维吉尼亚密码、 培根密码、 仿射密码
- Filename too long,Clone succeeded,but checkout failed.
- Apache FOP2.6 SVG导出PDF配置,解决中文字体变成####
- .net core添加word水印
- 前后端分离的文件上传,上传zip或者rar压缩包(vue+springboot)。
- 饥荒联机版专用服务器怎么修改小偷包,饥荒联机小偷背包代码 | 手游网游页游攻略大全...
- 在安装虚拟机时,”intel vt-x 处于禁用状态“ 如何解决
- mysql经典四表查询_sql 经典四表查询
- 游戏中的显示器选项的acm
- 《LINUX KERNEL MEMORY BARRIERS》
- c语言tab什么意思_我的C语言入门笔记。
- Jira4系列、Jira6系列破解实战
热门文章
- CSS3 仿古墓丽影9菜单界面
- jdk8新特性之出现This inspection finds all usages of methods that have @since tag in their documentation.
- mysql篇-sql查询语句-平均分、最高最低分、排序
- 店盈通:拼多多直通车推广怎么操作?技巧有哪些?
- zynqsd的读写数据_数据存储结构图 - Zynq7000 FPGA的高速信号采集处理平台的设计搭建以及后续拓展...
- 知物由学 | 一文读懂Android资源文件保护
- Windform C# Graphics绘图,消除锯齿
- 如何在Mac电脑中使用键盘移动操作鼠标焦点?如何在Mac中打开辅助键盘?
- 一个产品从0到1的完整流程
- loop与for loop分别实现乘法口诀表