当前位置: 首页 > news >正文

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也不会崩溃。

转载于:https://www.cnblogs.com/bigfi/p/7608237.html

相关文章:

  • 使用IntelliJ IDEA 配置Maven(入门)
  • 软件项目中的成本构成及估算方法【转】
  • windows下node配置npm全局路径(踩坑)
  • springmvc入门程序
  • SQServer查询数据库所有触发器
  • 流水线生产,精益生产,TPS和TOC的缓冲管理
  • win32——关机
  • 几个常用线程的
  • 可重入函数与不可重入函数
  • C#关于MSMQ通过HTTP远程发送专有队列消息的问题
  • python操作redis
  • Poisson Blending(Seamless clone)研究和实现
  • 【div】给div添加滚动条
  • DockOne微信分享( 九十四):唯品会基于Kubernetes的网络方案演进
  • jenkins自动构建
  • 【每日笔记】【Go学习笔记】2019-01-10 codis proxy处理流程
  • Angular数据绑定机制
  • CentOS从零开始部署Nodejs项目
  • docker python 配置
  • Mysql5.6主从复制
  • ReactNativeweexDeviceOne对比
  • SpiderData 2019年2月23日 DApp数据排行榜
  • spring boot下thymeleaf全局静态变量配置
  • Terraform入门 - 1. 安装Terraform
  • Vue实战(四)登录/注册页的实现
  • 初探 Vue 生命周期和钩子函数
  • 给第三方使用接口的 URL 签名实现
  • 好的网址,关于.net 4.0 ,vs 2010
  • 欢迎参加第二届中国游戏开发者大会
  • 回顾 Swift 多平台移植进度 #2
  • 聊聊directory traversal attack
  • 罗辑思维在全链路压测方面的实践和工作笔记
  • 如何解决微信端直接跳WAP端
  • 时间复杂度与空间复杂度分析
  • 数据库写操作弃用“SELECT ... FOR UPDATE”解决方案
  • 线性表及其算法(java实现)
  • 400多位云计算专家和开发者,加入了同一个组织 ...
  • 浅谈sql中的in与not in,exists与not exists的区别
  • #我与Java虚拟机的故事#连载01:人在JVM,身不由己
  • (14)学习笔记:动手深度学习(Pytorch神经网络基础)
  • (java)关于Thread的挂起和恢复
  • (ZT)北大教授朱青生给学生的一封信:大学,更是一个科学的保证
  • (八)光盘的挂载与解挂、挂载CentOS镜像、rpm安装软件详细学习笔记
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (编译到47%失败)to be deleted
  • (第61天)多租户架构(CDB/PDB)
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot宠物管理系统 毕业设计 121654
  • (生成器)yield与(迭代器)generator
  • (一一四)第九章编程练习
  • (译) 理解 Elixir 中的宏 Macro, 第四部分:深入化
  • (原創) 博客園正式支援VHDL語法著色功能 (SOC) (VHDL)
  • ..thread“main“ com.fasterxml.jackson.databind.JsonMappingException: Jackson version is too old 2.3.1
  • .apk 成为历史!
  • .NET NPOI导出Excel详解