Duilib学习笔记《05》— 消息响应处理
在Duilib学习笔记《04》中已经知道了如何将窗体显示出来,而如何处理窗体上的事件、消息呢?
一. 系统消息窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的部分消息的处理,需要重载该类的LRESULT HandleMessage(UINT uMsg, WPARAM wParam, LPARAM lParam); 函数。在显示窗体部分我们创建窗体WM_CREATE消息以及屏蔽标题栏WM_NCACTIVATE、WM_NCCALCSIZE、WM_NCPAINT等消息 都是在HandleMessage中进行处理:
case WM_GETMINMAXINFO: lRes = OnGetMinMaxInfo(uMsg, wParam, lParam, bHandled); break;
如同代码中所示,如果消息不需要框架再处理了则直接返回。如果还需要框架处理该消息,则交由父类的HandleMessge中去处理。
二. 事件消息
对于系统消息我们直接重载了HandleMessage来处理,而对于鼠标点击一类的消息呢?为此,我们的窗体除了要继承CWindowWnd外,还需要继承INotifyUI,同样的重载INotifyUI类中的void Notify(TNotifyUI msg); 函数,由该函数来处理控件操作产生的消息。但仅仅只是继承重载了还不够,我们怎么才能确保事件消息能正常传递呢?因此,在窗体创建OnCreate的时候,我们还需要添加如下m_PaintManager.AddNotifier(this); 这样,控件消息就可以传达大duilib的消息循环中,我们也就可以通过Notify函数对消息进行处理:
CTabLayoutUI* pTabSwitch = static_cast CTabLayoutUI* (m_PaintManager.FindControl(_T("tab_switch")));
CTabLayoutUI* pDemoListSwitch = static_cast CTabLayoutUI* (m_PaintManager.FindControl(_T("demo_list_tab_switch")));
在Notify函数中针对消息的不同进行不同的操作处理,比如click、selectchanged等等。对于这类duilib针对相关操作自定义的消息类型可以在duilib工程中的UIDefine.h文件中查看:
在实际中,我们有时候可能需要根据需要对部分消息进行分类处理。比如键盘按键消息等等。对于这类情况,我们的窗体需要继承IMessageFilterUI类,重载LRESULT MessageHandler(UINT uMsg, WPARAM wParam, LPARAM lParam, bool bHandled)函数,同时在窗体OnCreate创建的时候添加m_pm_.AddPreMessageFilter(this)消息通知即可。
WPF中窗口控件的跨线程调用 原文:WPF中窗口控件的跨线程调用 在WinForm中,我们要跨线程访问窗口控件,只需要设置属性CheckForIllegalCrossThreadCalls = false;即可。 在WPF中要麻烦一下,同样的不允许跨线程访问,因为没有权限,访问了会抛异常; 没有CheckForIllegalCrossThreadCalls 属性,怎么办? 在WPF中的窗口控件都有一个Dispatcher属性,允许访问控件的线程;既然不允许直接访问,就告诉控件我们要干什么就好了。
WPF获取窗口句柄的方法 原文:WPF获取窗口句柄的方法 通过WPF的互操作帮助类WindowInteropHelper,相关连接:https://msdn.microsoft.com/zh-cn/library/system.
MFC自定义消息 本文地址:http://blog.163.com/strive_only/blog/static/893801682010101911467765/ 消息机制是windows的典型运行机制,在MFC中有很多的消息如WM_BTN**等。
本来想自己写写duilib的消息机制来帮助duilib的新手朋友,不过今天发现已经有人写过了,而且写得很不错,把duilib的主干消息机制都说明了,我就直接转载过来了,原地址:http://blog.
相关文章
- ASP.NET MVC从请求到响应发生了什么
- http响应码301和302代表的是什么?有什么区别?
- OAuth 2.0系列教程(十一) 客户端证书请求和响应
- MFC动态按钮的创建及其消息响应 和 自定义消息
- 《响应式Web设计全流程解析》一第1章 拥抱变化
- SwiftUI PDFKit如何响应翻页消息
- 函数式编程、响应式编程、链式编程
- 《响应式Web设计:HTML5和CSS3实践指南》——导读
- vue响应式原理之reactive与shallowReactive
- 26-时尚精品服饰网店响应式网页模板 (HTML css JavaScript)
- Web网站模板-餐厅饭店宣传响应式网站模板(HTML+CSS+JavaScript)
- 电脑l浏览器提示DNS服务器未响应怎么办
- 15个专业版响应式WordPress主题
- 参数或变量中有语法错误。 服务器响应为: mail from address must be same as authorization user
- Swift - 触摸事件响应机制(UiView事件传递)
- Qt 按钮事件不响应
- SQL Server管理员专用连接的使用 作为一名DBA,经常会处理一些比较棘手的服务无响应问题,鉴于事态的严重性,多数DBA可能直接用“重启”大法,以便尽快的恢复生产环境的正常运转,但是多数情况