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

第十八篇:在SOUI中实现PreTranslateMessage

在MFC中,通常可以通过重载CWnd::PreTranslateMessage这样一个虚函数来实现对一些窗口消息的预处理。多用于tooltip的显示控制。

在SOUI中也实现了类似的机制。

要在SOUI中实现PreTranslateMessage,我们首先需要实现一个接口:

    struct IMessageFilter
    {
        virtual BOOL PreTranslateMessage(MSG* pMsg) = 0;
    };

可以看出,实现这个接口和在MFC中重载PreTranslateMessage是相同的道理。

和MFC中只需要重载这个接口不同,在SOUI中,除了需要实现IMessageFilter外,还需要向当前的MessageLoop注册该IMessageFilter。

    class SOUI_EXP SMessageLoop
    {
    public:
        SArray<IMessageFilter*> m_aMsgFilter;
                
        // Message filter operations
        BOOL AddMessageFilter(IMessageFilter* pMessageFilter);

        BOOL RemoveMessageFilter(IMessageFilter* pMessageFilter);
        //...
    };

上面是SMessageLoop两个和IMessageFilter相关的方法。

SMessageLoop::AddMessageFilter向当前的message loop注册一个IMessageFilter;
SMessageLoop::RemoveMessageFilter则向当前的message loop注销一个IMessageFilter

剩下的问题就是如何获得当前的MessageLoop了。

在SHostWnd 或者SHostDialog中可以调用SHostWnd::GetMsgLoop()方法获得。

在SWindow中,则可以调用SWindow::GetContainer()->GetMsgLoop()获得。

使用示例可以参考SDropDownWnd的实现。

class SOUI_EXP SDropDownWnd : public SHostWnd, public IMessageFilter
{
//...
};

  

 

 
 
 

相关文章:

  • hash、hashchange事件
  • 解决问题的前提——放空自己
  • 并发之AtomicInteger
  • CentOS6.5使用createrepo搭建本地源
  • Docker系列教程21-Docker Compose快速入门
  • centOS下NFS服务器的安装配置详解
  • IDEA下从零开始搭建SpringBoot工程
  • SQL SERVER时间格式化
  • top命令的使用
  • 手机WAP前端开发标准
  • 微信钱包入口开发笔记
  • 编程是一个没有前途的工作
  • 32位系统(软件)和64位系统(软件)的区别(跑的快,内存支持多)
  • SQL点滴34—SQL中的大小写
  • Windows 10下安装配置Caffe并支持GPU加速(修改版)
  • Dubbo 整合 Pinpoint 做分布式服务请求跟踪
  • ES学习笔记(10)--ES6中的函数和数组补漏
  • JavaScript学习总结——原型
  • JS字符串转数字方法总结
  • React+TypeScript入门
  • Shadow DOM 内部构造及如何构建独立组件
  • SwizzleMethod 黑魔法
  • WebSocket使用
  • windows下mongoDB的环境配置
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何选择开源的机器学习框架?
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 回归生活:清理微信公众号
  • 数据可视化之下发图实践
  • ​iOS安全加固方法及实现
  • #include到底该写在哪
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • (android 地图实战开发)3 在地图上显示当前位置和自定义银行位置
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (分布式缓存)Redis分片集群
  • (论文阅读11/100)Fast R-CNN
  • (转)Google的Objective-C编码规范
  • .net framework 4.0中如何 输出 form 的name属性。
  • .net refrector
  • .NET:自动将请求参数绑定到ASPX、ASHX和MVC(菜鸟必看)
  • .netcore如何运行环境安装到Linux服务器
  • .Net调用Java编写的WebServices返回值为Null的解决方法(SoapUI工具测试有返回值)
  • .NET应用架构设计:原则、模式与实践 目录预览
  • /ThinkPHP/Library/Think/Storage/Driver/File.class.php  LINE: 48
  • ::before和::after 常见的用法
  • :“Failed to access IIS metabase”解决方法
  • @ResponseBody
  • [].slice.call()将类数组转化为真正的数组
  • [2021]Zookeeper getAcl命令未授权访问漏洞概述与解决
  • [3D游戏开发实践] Cocos Cyberpunk 源码解读-高中低端机性能适配策略
  • [④ADRV902x]: Digital Filter Configuration(发射端)
  • [BUAA软工]第一次博客作业---阅读《构建之法》
  • [BZOJ] 3262: 陌上花开
  • [CSAWQual 2019]Web_Unagi ---不会编程的崽