Win32 按钮嵌套收不到消息解决记录
太长不看
SetWindowSubClass
,然后 return DefSubclassProc(hWnd, uMsg, wParam, lParam);
,不要有 WS_CHILD
这个 Style。
缘起
翻 ControlSpy 的时候发现了 BS_GROUPBOX
Style,结合脑补觉得这是类似 Frame
的东西,安排了一个还真是。
ControlSpy 截图,无 HiDPI 支持
那么既然控件要放在 Frame 里,而 Frame 是一种 Button,那么就会存在按钮嵌套“按钮”的情况发生,所以 BS_PUSHBUTTON
应该也是可以嵌套 BS_PUSHBUTTON
的,甚至可能可以嵌套 Static
。
测试程序,开了 HiDPI 支持,所以高清一些
然后测试事件绑定的时候就发现了问题,WndProc
里面没有收到消息,然后简单翻了一下发现会传 WM_PARENTNOTIFY
,然后在 WndProc
的回调里面加上了这个 case
,的确收到了,但是根据文档来看这个东西给出的事件和信息都很有限,甚至后期测文本框的时候文本框的 CHANGE
事件都收不到,所以就锅++了。
Day 1
搜了一个小时,并没有搜出来什么东西,于是就去 StackOverflow 上面问了。当时问的时候给的图是按钮套按钮的,看上去很怪异,而且并不会有人去这样用控件,而且可能描述上也存在一些问题,导致评论区负面评价比较多,也没获得啥有用信息。
当时查了挺多的东西,翻这些网页流量都 300 多 M(宽带),可见有多猛。。看了许多相关不相关的东西,啥 MFC 的、GetMenu
什么的都有看过,虽然开的时候就知道这种东西不太相关但是还是看了看。
因为前一天太猛,第二天累到爆炸,咕了一天。
Day 3
首先是简单整理了一下原来建 TextBox
的代码,然后依然是从 WM_PARENTNOTIFY
开始找起,看到了 WM_NOTIFY
,然后了解了一下 Windows 的消息流程,随着引导看到了 SendAsyncProc
,但是对解决问题都没啥用,又抱有一丝希望。花了一段时间去研究为啥收不到 WM_NOTIFY
,没啥发现,最后也没收得到,然后看到了 MFC 相关的一些东西,发现这么方便,有一点酸,但是项目架构原因只能用原生。
最后,在这里 Child windows does not receive WM_DESTROY?,看到了真正的答案。既然涉及到了 Child Windows,要手动收到 WM_DESTROY
就说明题主想要在 Destroy 时额外做点什么,而如果能解决,就必定有遍历发消息什么的。其实之前看到了一个提问,只是下面没回答。然后就说到了 SetWindowSubClass
,顺理成章地看文档,发现就是要的这个,然后放上去。
放上去之后 F5 开幕雷击,整个窗口算是全白的,之前在新的回调里就是直接调的旧的回调,然后折腾了一下试了几种方案都不行,回去看代码发现在构造的时候 or 了 WS_CHILD
,然后既然 SetWindowSubClass
了,就不像是一个 Child,注释掉就好了。
用了这个以后之前注册控件类回调挂掉,错误的注册方法没啥问题的注册函数可以不用要了。
Win32 按钮嵌套收不到消息解决记录的更多相关文章
- C#开发微信公众号.NET平台MVC微信开发Demo解决收不到消息的问题
不得不说现在微信非常火,微信开放平台可以自己写程序跟用户交互,节省了前台开发成本,免去用户装客户端的烦恼.于是今天兴致来潮,想做一个试试. 首先找到了开发者文档,看了看,蛮简单的.(公众号早已申请,有 ...
- win32程序之窗口程序,以及消息机制
win32程序值窗口程序,以及消息机制 一丶简介 通过上一讲.我们了解了窗口其实是绘制出来的.而且是不断绘制的过程. 所以窗口的本质是绘制. 但是我们现在看到的窗口程序.都可以点击关闭按钮. 使用鼠标 ...
- 搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务
搞懂分布式技术19:使用RocketMQ事务消息解决分布式事务 初步认识RocketMQ的核心模块 rocketmq模块 rocketmq-broker:接受生产者发来的消息并存储(通过调用rocke ...
- wordpress在撰写新文章界面的显示选项按钮点击无反应的解决办法
原文链接:wordpress在撰写新文章界面的显示选项按钮点击无反应的解决办法 最近升级wordpress之后,发现在文章编辑界面的添加新媒体和可视化按钮点击无反应,如下: 然后就在网上找解决办法, ...
- PullToRefreshListView中嵌套ViewPager滑动冲突的解决
PullToRefreshListView中嵌套ViewPager滑动冲突的解决 最近恰好遇到PullToRefreshListView中需要嵌套ViewPager的情况,ViewPager 作为头部 ...
- ie6,ie7,ie8 css bug兼容解决记录
ie6,ie7,ie8 css bug兼容解决记录 转载自:ie6,ie7,ie8 css bug兼容解决记录 - 前端开发 断断续续的在开发过程中收集了好多的bug以及其解决的办法,都在这个文章里面 ...
- 解决记录:win10 无法安装VS2017,visual studio installer下载进度始终为0
问题描述:win10 下无法安装VS2017,visual studio installer下载进度始终为0,点击取消按钮后,也没有反应,visual studio installer也关闭不掉: 具 ...
- 错误解决记录------------rhel安装Mysql软件包依赖 mariadb组件
错误解决记录------------软件包依赖 mariadb组件 错误信息: 错误:软件包:akonadi-mysql-1.9.2-4.el7.x86_64 (@anaconda) 需要:maria ...
- Apache coredump 问题发现与解决记录
目录 Apache coredump 问题发现与解决记录 背景 发现问题 解决问题 方法 1 方法 2 总结 Linux 程序编译链接动态库版本问题 ldd 命令 动态库的编译和 soname 线上 ...
随机推荐
- 树分治(挑战p360)
poj1741 题:http://poj.org/problem?id=1741 #include<iostream> #include<algorithm> #include ...
- 自定义控件 监控宿主activity的生命周期
使用不显示的fragment来监控activity生命周期,fragment生命周期基本上跟随宿主activity变化.我们通过fragment的生命周期就可以知到activity的生命周期 我们自定 ...
- 火车进出栈 java
题目描述 一列火车n节车厢,依次编号为1,2,3,…,n.每节车厢有两种运动方式,进栈与出栈,问n节车厢出栈的可能排列方式有多少种. 输入 一个数,n(n<=60000) 输出 一个数s表示n节 ...
- Fiddler发送get post测试 笔记
0 环境 系统环境:win7 1 操作 1 post 类似 2 get
- js手机浏览器video标签会一直置顶,遮盖住弹出层问题
<video x5-playsinline="" playsinline="" webkit-playsinline="">&l ...
- 网页中常见返回HTTP状态码含义
在日常网页浏览的过程中大家经常会碰到400,403,404,500,502等HTTP状态码,这些状态码对于一般用户来说出现什么都是一样的,反正就是页面打不开了,但是作为网站开发人员或者从事相关工作者认 ...
- FPGA的存储方式大全
好的时序是通过该严密的逻辑来实现的.http://blog.csdn.net/i13919135998/article/details/52117053介绍的非常好 有RAM(随机存储器可读可写)RO ...
- row_number over( partition by xx)
在原始表中 新加一个临时列 去重, 排序 比多次join性能提高很多 http://www.mysqltutorial.org/mysql-window-functions/mysql-row_num ...
- Skipping MapperFactoryBean with name 'sysUserMapper' and 'com.buding.system.mapper.SysUserMapper' mapperInterface. Bean already defined with the same name!
前几天整体看了一下SpringBoot的简介,觉得看不如自己动手做,于是动手做一个简单的用户管理.启动的时候遇到了Skipping MapperFactoryBean with name 'sysUs ...
- RPC 框架性能大比拼
Dubbo 是阿里巴巴公司开源的一个Java高性能优秀的服务框架,使得应用可通过高性能的 RPC 实现服务的输出和输入功能,可以和 Spring框架无缝集成. Motan 是新浪微博开源的一个Java ...