Duilib学习笔记《05》— 消息响应处理
来源:互联网 发布:java的if else 编辑:程序博客网 时间:2024/06/14 04:01
在Duilib学习笔记《04》中已经知道了如何将窗体显示出来,而如何处理窗体上的事件、消息呢?
一. 系统消息
窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的部分消息的处理,需要重载该类的LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam); 函数。在显示窗体部分我们创建窗体WM_CREATE消息以及屏蔽标题栏WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT等消息 都是在HandleMessage中进行处理:
如同代码中所示,如果消息不需要框架再处理了则直接返回。如果还需要框架处理该消息,则交由父类的HandleMessge中去处理。
二. 事件消息
对于系统消息我们直接重载了HandleMessage来处理,而对于鼠标点击一类的消息呢?为此,我们的窗体除了要继承CWindowWnd外,还需要继承INotifyUI,同样的重载INotifyUI类中的void Notify(TNotifyUI& msg); 函数,由该函数来处理控件操作产生的消息。但仅仅只是继承重载了还不够,我们怎么才能确保事件消息能正常传递呢?因此,在窗体创建OnCreate的时候,我们还需要添加如下m_PaintManager.AddNotifier(this); 这样,控件消息就可以传达大duilib的消息循环中,我们也就可以通过Notify函数对消息进行处理:
在Notify函数中针对消息的不同进行不同的操作处理,比如click、selectchanged等等。对于这类duilib针对相关操作自定义的消息类型可以在duilib工程中的UIDefine.h文件中查看:
三. 消息过滤
在实际中,我们有时候可能需要根据需要对部分消息进行分类处理。比如键盘按键消息等等。对于这类情况,我们的窗体需要继承IMessageFilterUI类,重载LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool& bHandled)函数,同时在窗体OnCreate创建的时候添加m_pm_.AddPreMessageFilter(this)消息通知即可。
>> 本文固定链接: http://www.who1753.com/duilib-study-05.html
>> 转载请注明: who1753 2014年01月17日 于 WHO1753 发表
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- Duilib学习笔记《05》— 消息响应处理
- DUILib学习笔记---消息处理
- DuiLib(4)——消息响应
- 解析duilib 消息处理函数-笔记1
- Akka学习笔记:Actor消息处理-请求和响应(1)
- Akka学习笔记:Actor消息处理-请求和响应(2)
- duilib : 消息处理 tips
- duilib消息处理
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- DuiLib消息处理剖析
- 2013 duilib入门简明教程 -- 事件处理和消息响应 (17)
- targetSdkVersion和与target属性的区别
- Duilib学习笔记《04》— 窗体显示
- HANTS——时间序列谐波分析法
- Linux内存:内存管理的实质
- C语言中变长数组的使用方法
- Duilib学习笔记《05》— 消息响应处理
- 【Android知识点精讲】(9)WebView
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- UVA 3708<数学题><在一个集合中挑选出与另外一个集合相同数量的点求两者之前的差的绝对值最小>
- __weak & __strong
- Duilib学习笔记《07》— 资源加载
- 桌面图标打不开问题
- WiresShark使用初探
- Duilib扩展《01》— 双击、右键消息扩展