WM_MOUSEWHEEL、WM_LBUTTONDOWN等父子窗口消息传递陷阱
mfc中,碰到以下问题:父对话框A、子窗口B。B是CWnd对象。需要在B中处理WM_MOUSEWHEEL、WM_LBUTTONDOWN等消息。
所以在B中增加对应的消息处理,发现B中的消息循环中,收不到WM_MOUSEWHEEL、WM_LBUTTONDOWN这些消息。
但是在A中却可以收到这些消息,应该是这些消息被A截获了,因为我在A中响应了PreTranslateMessage函数
BOOL A::PreTranslateMessage(MSG* pMsg){
return __super::PreTranslateMessage(pMsg);
}
。那么怎么让B响应这些消息呢。
一般的做法是:1.在A中响应这些消息,然后调用B对象的方法。如果A或B所处的文件结构不是很复杂的话,这样应该是最简单的。
2.PreTranslateMessage函数最后,改为return FALSE。让消息往子窗口B传递。
但是我的情况是B是在一个单独的dll里的,所以不打算增加额外接口,直接通过:
SendMessage(B.hWnd,WM_MOUSEWHEEL,zDelta, MAKELPARAM(pt.x, pt.y));这样的方式传递消息。
但是我在B中接收这个WM_MOUSEWHEEL消息的时候,
BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){
return CWnd::OnMouseWheel(nFlags,zDelta,pt);
}
导致了程序的崩溃。
其实,通过调试可以发现,B中的该处理函数是处于死循环状态。所以修改为
BOOL OnMouseWheel(UINT nFlags, short zDelta, CPoint pt){
return TRUE;//因为此时B已经是最顶层的窗口了,无子窗口,所以直接截获(别的消息却不会崩溃)
}
该问题解决。注:如果是WM_LBUTTONDOWN等消息,调用CWnd::OnLButtonDown却不会崩溃,即使是CDialog::OnMouseWheel也不会崩溃。
WM_MOUSEWHEEL、WM_LBUTTONDOWN等父子窗口消息传递陷阱的更多相关文章
- JS方法在iframe父子窗口间的调用
本文向大家简单介绍一下iframe父子窗口间JS方法调用,JavaScript 被数百万计的网页用来改进设计.验证表单.检测浏览器.创建cookies,以及更多的应用,希望本文介绍对你有所帮助. if ...
- Flex父子窗口相互调用
Flex父子窗口相互调用 1.设计思路 (1)子窗口调用父窗口的方法 (2)子窗口做了修改后,返回父窗口,父窗口调用子窗口函数 2.设计源码 (1)父窗口 ParentWindow.mxml: < ...
- Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用
Extjs Ext.ux.IFrame的用法 以及父子窗口间函数相互调用 Ext.ux.IFrame Extjs官方提供的一个组件,可以很方便的使用. 这样就完成了一个简单的IFrame的使用,通过E ...
- QMdiArea及QMdiSubWindow实现父子窗口及布局方法
版权声明:若无来源注明,Techie亮博客文章均为原创. 转载请以链接形式标明本文标题和地址: 本文标题:QMdiArea及QMdiSubWindow实现父子窗口及布局方法 本文地址:http ...
- js open窗口父子窗口操作
http://zhidao.baidu.com/question/61358246.html?an=0&si=1 js open窗口父子窗口操作 父窗口js代码: function ...
- 使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死)
原文:使用 SetParent 跨进程设置父子窗口时的一些问题(小心卡死) 在微软的官方文档中,说 SetParent 可以在进程内设置,也可以跨进程设置.当使用跨进程设置窗口的父子关系时,你需要注意 ...
- 使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点
原文:使用 SetParent 制作父子窗口的时候,如何设置子窗口的窗口样式以避免抢走父窗口的焦点 制作传统 Win32 程序以及 Windows Forms 程序的时候,一个用户看起来独立的窗口本就 ...
- WM_PAINT(父子窗口间)
WM_PAINT(父子窗口间) 窗口句柄(HWND)都是由操作系统内核管理的,系统内部有一个z-order序列,记录着当前从屏幕底部(假象的从屏幕到眼睛的方向),到屏幕最高层的一个窗口句柄的排序,这个 ...
- iFrame 父子窗口通讯
今天就来说说 iFrame 的父子窗口通讯,关于 iFrame 这里就不陈述了,想要了解的盆友可以百度一下, 由于项目需要,前些天用到了个弹框框架 layer 弹出层,有很多弹出的方式,其中一种就是用 ...
随机推荐
- RabbitMQ 从入门到精通 (一)
目录 1. 初识RabbitMQ 2. AMQP 3.RabbitMQ的极速入门 4. Exchange(交换机)详解 4.1 Direct Exchange 4.2 Topic Exchange 4 ...
- [转帖]redhat7.6Linux安装Oracle19C完整版教程
redhat7.6Linux安装Oracle19C完整版教程 https://www.oracle.com/technetwork/database/enterprise-edition/downlo ...
- Oracle RAC 创建实例出错(非+DATA目录)的简单处理
今天进行oracle的rac测试 发现开发同事没有写好 oracle rac的设置. 创建完之后就会报错了 因为自己对oracle 的RAC 不太熟悉 不太会用.. 所以用 一个比较简单的办法. a ...
- [Linux] - Manjaro ARM 系统配置(更新镜像源,安装 Docker 和 Dotnet Core)
硬件:Raspberry Pi 4B系统:Manjaro-ARM-xfce-rpi4-19.08网址:https://manjaro.org/ Issue系统启动后,中文字符显示为小方格乱码 解决:安 ...
- LeetCode 1259. Handshakes That Don't Cross - Java - DP
题目链接:https://leetcode-cn.com/problems/handshakes-that-dont-cross/ You are given an even number of pe ...
- head first c# -- 第七章 (接口与抽象类)
接口的作用: 例子:有鸡,鸭,牛,羊4个类,还有farmer类: farmer.feed(obj obj) { obj.eat() } // 没有接口: farmer.feedChicken(Chic ...
- 【leetcode-78 dfs+回溯】 子集
子集 给定一组不含重复元素的整数数组 nums,返回该数组所有可能的子集(幂集). 说明:解集不能包含重复的子集. 示例: 输入: nums = [1,2,3] 输出: [ [3], [1], ...
- C# vb .net实现宝丽来效果滤镜
在.net中,如何简单快捷地实现Photoshop滤镜组中的宝丽来效果呢?答案是调用SharpImage!专业图像特效滤镜和合成类库.下面开始演示关键代码,您也可以在文末下载全部源码: 设置授权 第一 ...
- QueryDSL-JPA
QueryDSL-JPA QueryDSL简介 官网 1 QueryDSL仅仅是一个通用的查询框架,专注于通过Java API构建类型安全的SQL查询. 2 Querydsl可以通过一组通用的查询AP ...
- react学习记录(一)
一.React是什么 声明式写法(强调结果,命令式编程强调过程) 组件化 一次学习,随处编写(多种应用场景,web程序,原生手机应用,系统应用,命令行工具) 二.为什么学习react 大公司加持-fa ...