锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置:锐英源 / 开源技术 / C++开源心得 / CWnd派生类影响焦点和MFC按钮点2次才有反应
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

锐英源精品开源,禁止转载和任何形式的非法内容使用,违者必究


CWnd派生类影响焦点和MFC按钮点2次才有反应

背景

最近用VC++开发,使用一个CWnd派生类,这个类实现了编辑框的功能。编辑框放对话框上,对话框上还有些按钮,突然发现按钮要点2次才有反应,这问题很致命,客户肯定要说,所以要解决。

过程

先是怀疑对话框的PreTranslateMessage函数有影响,因为它会预处理消息发送,中间可能会禁止某些消息向子控件上发送,把PreTranslateMessage里面多余的代码删除,问题依旧。

后来在网上查,说是Capture的问题,我看我代码,在CWnd派生类里的OnKillFocus里有ReleaseCapture啊,当时想,既然提前ReleaseCapture了,点击时肯定不受影响啊。在走投无路时,隐约记得原来的例子里,派生类工作时,其它按钮可以正常使用啊。后来又想到OnKillFocus是后来自己加的,是不是有影响,就把OnKillFocus的代码注释了,再次运行文件,问题解决。

OnKillFocus是窗口失去焦点时会调用,它的参数是新窗口的CWnd指针。

ReleaseCapture是让窗口失去捕获焦点功能。一般配合SetCapture使用。

总结

在某些对多个窗口状态有影响的函数位置里,少使用ReleaseCapture,因为它影响的可能不是所在类对应的窗口。写代码,有时候有些功能出于好心,多写了代码,反而会造成没必要的麻烦。有时候,试验性的代码用过后,要立即删除,留着有可能影响正常功能。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内