Duilib学习笔记《06》— 窗体基类WindowImpBase
在前面的例子中我们发现,窗口都是继承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 ;
}
补充说明:
1. duilib自带的提供的WindowImpBase当中可能存在部分问题,具体的后续会提到。根据时间情况的需要,可自行对WindowImpBase继续修改补充。参考代码:DuiLib通用窗口类WindowImpBase封装
2. 附上本节对应的代码:代码下载
Duilib学习笔记《06》— 窗体基类WindowImpBase的更多相关文章
- Duilib学习笔记《04》— 窗体显示
在前面已经了解了duilib控件以及界面布局相关内容,接下来就要考虑该如何将xml中描述的布局通过界面展现出来.实际上在 Duilib学习笔记<01> 中我们已经简单提到过基本的流程及元素 ...
- Duilib学习笔记《03》— 控件使用
在前面已经对duilib有个一个基本的了解,并且创建了简单的空白窗体.这仅仅只是一个开始,如何去创建一个绚丽多彩的界面呢?这就需要一些控件元素(按钮.文本框.列表框等等)来完善. 一. Duilib控 ...
- Duilib学习笔记《05》— 消息响应处理
在Duilib学习笔记<04>中已经知道了如何将窗体显示出来,而如何处理窗体上的事件.消息呢? 一. 系统消息 窗体显示的时候我们就已经说了,窗体是继承CWindowWnd类的,对于窗体的 ...
- iOS学习笔记06—Category和Extension
iOS学习笔记06—Category和Extension 一.概述 类别是一种为现有的类添加新方法的方式. 利用Objective-C的动态运行时分配机制,Category提供了一种比继承(inher ...
- DuiLib学习笔记(二) 扩展CScrollbar属性
DuiLib学习笔记(二) 扩展CScrollbar属性 Duilib的滚动条滑块默认最小值为滚动条的高度(HScrollbar)或者宽度(VScrollbar).并且这个值默认为16.当采用系统样式 ...
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记
机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架15(窗体基类场景1)
最基础的窗体基类其实是通过应用场景反推的结构. 以下是场景一: 单表应用,普通的数据,比如单位/颜色/特殊字典等使用者少的,无需过多控制的可以使用一个数据表格来管理. 和Excel表格差不多,批量修改 ...
- C# Winform下一个热插拔的MIS/MRP/ERP框架13(窗体基类)
作为一个ERP数据处理框架,大部分的开发场景都差不多. 理想中,对于通用数据处理,我的步骤如下: 1.为窗体指定数据来源(数据表/查询等): 2.拖入编辑控件,指定绑定字段: 3.结束. 为此,我设计 ...
随机推荐
- (WPF) MVVM: DataGrid Binding
Binding到DataGrid的时候,需要用到ObservableCollection. public ObservableCollection<Customer> Customers ...
- 避免HTML5六种错误用法
一.不要使用section作为div的替代品 人们在标签使用中最常见到的错误之一就是随意将HTML5的<section>等价于<div>--具体地说,就是直接用作替代品(用于样 ...
- IGS_学习笔记03_Integrated SOA Gateway设定配置(案例)
20150506 Created By BaoXinjian
- 时间c#
无论Time.timeScale 等于多说Update和LateUpdate都会去执行 Time.timeScale会影响FixedUpdate的速度. Time.timeScale还会影响Time ...
- 手动编码运行java程序
javac Server.java 编译java文件成class java Server 运行程序
- WCF服务在高并发情况下报目标积极拒绝的异常处理 z
http://www.cnblogs.com/kklldog/p/5037006.html wcf的监控服务,偶尔监控到目标服务会报一个目标积极拒绝的错误.一开始以为服务停止了,上服务器检查目标服务好 ...
- Informix 中执行多条SQL(Execute Script)
有的时候我们需要在ADO.NET中同时执行多条的SQL语法,我们要如何处理, 例如下: //查詢基本資料 private static void TestQry() { DataTable dtRet ...
- 微信消息接收 验证URL有效性 C#代码示例
官方文档只给出了PHP的示例代码 开发者提交信息后,微信服务器将发送GET请求到填写的URL上,GET请求携带四个参数: 参数 描述 signature 微信加密签名,signature结合了开发者填 ...
- ZOJ 3042 City Selection II 【序】【离散化】【数学】
题意: 输入数据n,m.n代表工厂的数量,m代表城市的数量. 接下来n+m行为工厂和城市的坐标. 规定如图所示方向刮风,工厂的air会污染风向地区的air. 注意,工厂和城市的坐标表示的是从x到x+1 ...
- spring项目中使用weblogic的连接池
1.首先在weblogic控制台中配置好一个数据源 我这里建立的数据源的名称叫 jdbc/app1,JNDI名称也叫 jdbc/app1 2.在spring中配置数据源的时候,做如下配置: <b ...