Duilib学习笔记《06》— 窗体基类WindowImpBase

简介:

在前面的例子中我们发现,窗口都是继承CWindowWnd、INotifyUI,然后重载相关函数去实现。显然,我们发现窗口的创建流程实际上都是差不多的,主要只是在OnCreate加载的配置文件不同等等…所以,能不能创建一个公有的窗体基类呢?其实,在duilib中已经提供了一个窗体基类 WindowImplBase:在基类内搭建窗口的消息框架,各处理函数为虚函数,子类可以重载处理函数,实现其处理。

此处我们以修改之前的代码为例来进行说明。


1. 窗体显示

CMainWndDlg类修改为继承WindowImpBase类:class CMainWndDlg : public WindowImplBase

将之前的成员函数全部删除,添加如下函数(实际上是重载WindowImplBase中的函数

1 public:
2     LPCTSTR GetWindowClassName() const;   
3     virtual CDuiString GetSkinFile();
4     virtual CDuiString GetSkinFolder();

对应的函数实现:

1 LPCTSTR CMainWndDlg::GetWindowClassName() const
2 {
3     return _T("UIMainWnd");
4 }
5 CDuiString CMainWndDlg::GetSkinFile()
6 {
7     return _T("DemoSkin.xml");
8 }
9 CDuiString  CMainWndDlg::GetSkinFolder()
10 {
11     return CDuiString(CPaintManagerUI::GetInstancePath());
12 }

这里,窗体Create创建时直接根据传递的窗口XML布局文件,调用父类的函数处理。这样一来,编译运行窗体就可以显示出来了。


2. 消息处理

对于每个窗体,具体的操作是不一样的,所以对应的控件消息等等还需要在对应的窗体中去自行处理。

2.1)事件消息

对于duilib自带的消息,其处理和Duilib学习笔记《05》中的处理是一样的,该部分基本没什么变化。只需要重装Notify,然后在实现中进行相关处理即可。(具体参见代码)

2.2 ) 用户自定义消息

在实际情况中,可能多个窗口之间传递用户自定义消息等情况,而对于用户自定义消息。我们需要在HandleCustomMessage中去处理。首先需要重载该函数:LRESULT HandleCustomMessage(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);在函数实现中,根据具体的消息进行部分的分支处理:

1 LRESULT CMainWndDlg::HandleCustomMessage( UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled )
2 {
3     bHandled = TRUE;    // 消息本地处理,不流入系统处理。
4     switch (uMsg)
5     {
6     default:
7         bHandled = FALSE;    // 本地没有处理,流入系统处理。
8     }
9     return 0;
10 }

补充说明:

1. duilib自带的提供的WindowImpBase当中可能存在部分问题,具体的后续会提到。根据时间情况的需要,可自行对WindowImpBase继续修改补充。参考代码:DuiLib通用窗口类WindowImpBase封装

目录
相关文章
|
API 索引
MFC 树形控件CTreeCtrl类
MFC 树形控件CTreeCtrl类
327 0
MFC 树形控件CTreeCtrl类
Qt编写自定义控件30-颜色多态按钮
一、前言 这个控件一开始打算用样式表来实现,经过初步的探索,后面发现还是不够智能以及不能完全满足需求,比如要在此控件设置多个角标,这个用QSS就很难实现,后面才慢慢研究用QPainter来绘制,我记得当时接到这个定制控件任务的时候是2016年,那时候对QPainter的使用还不是很熟悉,也就是从此控件开始,逐步研究QPainter的绘制,把所有的内置函数都使用一遍,最终用的越来越熟悉,使得后来到了心中有坐标,万物皆painter的境界,可能就像武林中所说的打通了任督二脉吧。
1145 0
|
开发工具 C语言
Qt编写自定义控件13-多态进度条
一、前言 多态进度条,顾名思义,有多重状态,其实本控件主要是用来表示百分比进度的,由于之前已经存在了百分比进度条控件,名字被霸占了,按照先来先得原则,只好另外取个别名叫做多态进度条,应用场景是,某种任务有三种状态,比如正常状态、警戒状态、报警状态,这三种状态都分别有一个占比,需要用不同的颜色表示,这样就衍生出了此控件,类似于堆积图。
962 0
|
C#
WPF自定义控件(二)の重写原生控件样式模板
原文:WPF自定义控件(二)の重写原生控件样式模板        话外篇: 要写一个圆形控件,用Clip,重写模板,去除样式引用圆形图片可以有这三种方式。   开发过程中,我们有时候用WPF原生的控件就能实现自己的需求,但是样式、风格并不能满足我们的需求,那么我们该怎么办呢?----自定义样式与模板。
1216 0
|
C# 项目管理
WPF 窗体基类实现的体验及实现回车到下一控件
原文:WPF 窗体基类实现的体验及实现回车到下一控件 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/jsyhello/article/details/7216509 ...
1077 0
Winform窗体间传值(委托)
最近工作室为了应付 比赛 赶了一个排课系统 我负责排课的功能 写了一个星期终于赶出来了 用到了Winform窗体间传值。
961 0