Duilib学习笔记《06》— 窗体基类WindowImpBase
来源:互联网 发布:阿里妈妈解绑淘宝账号 编辑:程序博客网 时间:2024/06/12 12:00
在前面的例子中我们发现,窗口都是继承CWindowWnd、INotifyUI,然后重载相关函数去实现。显然,我们发现窗口的创建流程实际上都是差不多的,主要只是在OnCreate加载的配置文件不同等等…所以,能不能创建一个公有的窗体基类呢?其实,在duilib中已经提供了一个窗体基类 WindowImplBase:在基类内搭建窗口的消息框架,各处理函数为虚函数,子类可以重载处理函数,实现其处理。
此处我们以修改之前的代码为例来进行说明。
1. 窗体显示
CMainWndDlg类修改为继承WindowImpBase类:class CMainWndDlg : public WindowImplBase
将之前的成员函数全部删除,添加如下函数(实际上是重载WindowImplBase中的函数)
public: LPCTSTR GetWindowClassName() const; virtual CDuiString GetSkinFile(); virtual CDuiString GetSkinFolder();
对应的函数实现:
LPCTSTR CMainWndDlg::GetWindowClassName() const{ return _T("UIMainWnd");}CDuiString CMainWndDlg::GetSkinFile(){ return _T("DemoSkin.xml");}CDuiString CMainWndDlg::GetSkinFolder(){ return CDuiString(CPaintManagerUI::GetInstancePath());}这里,窗体Create创建时直接根据传递的窗口XML布局文件,调用父类的函数处理。这样一来,编译运行窗体就可以显示出来了。
2. 消息处理
对于每个窗体,具体的操作是不一样的,所以对应的控件消息等等还需要在对应的窗体中去自行处理。
2.1 事件消息
对于duilib自带的消息,其处理和Duilib学习笔记《05》中的处理是一样的,该部分基本没什么变化。只需要重装Notify,然后在实现中进行相关处理即可。(具体参见代码)
2.2 用户自定义消息
在实际情况中,可能多个窗口之间传递用户自定义消息等情况,而对于用户自定义消息。我们需要在HandleCustomMessage中去处理。首先需要重载该函数:LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);在函数实现中,根据具体的消息进行部分的分支处理:
LRESULT CMainWndDlg::HandleCustomMessage( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled ){ bHandled = TRUE; // 消息本地处理,不流入系统处理。 switch (uMsg) { default: bHandled = FALSE; // 本地没有处理,流入系统处理。 } return 0;}
补充说明:
duilib自带的提供的WindowImpBase当中可能存在部分问题,具体的后续会提到。根据时间情况的需要,可自行对WindowImpBase继续修改补充。
PS: 欢迎关注微信公众号:开发者小黑屋,分享优质技术干货。
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- Duilib学习笔记《04》— 窗体显示
- Duilib学习笔记《04》— 窗体显示
- Duilib学习笔记《04》— 窗体显示
- Duilib学习笔记《04》— 窗体显示
- Duilib学习笔记《04》— 窗体显示
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib学习笔记《02》— 界面布局
- Duilib学习笔记《03》— 控件使用
- nyoj 28 大数阶乘
- js小结:函数&变量
- c++ primer 第五版 StrBlob类(p404)
- 《java入门第一季》之tcp协议下的编程实现键盘录入数据不断地往服务器端发送数据案例
- android 优化总结
- Duilib学习笔记《06》— 窗体基类WindowImpBase
- 构建支持registry v2的shipyard的镜像
- FZU 2168
- 第12周项目1-实现复数类中的运算符重载-3
- OAuth2.0授权方式
- 面向对象设计思想20160528
- 《Python3廖雪峰》datetime转timestamp练习题答案
- web第二课html课堂笔记
- 《编程珠玑》(第2版)第2章”:课后习题7(矩阵转置)