Duilib创建添加自定义控件
来源:互联网 发布:打开哪里查看端口 编辑:程序博客网 时间:2024/05/22 13:21
本篇参考资料:Duilib自定义控件博文(duilib开发基础:创建自定义控件的过程):http://blog.csdn.net/zhuhongshu/article/details/45362751
Duilib是一个强大的c++界面库,相比MFC,它对于程序员来说更加友好。不仅易懂易学,做出的界面效果还比较美观。据悉,现在市面上很多桌面应用都是直接或间接地基于Duilib来制作的。
这篇博文主要介绍如何把自定义的控件融入到Duilib的控件里面。由于现在Duilib的作者没有维护了,所以现在也出现了Duilib的各种版本,本篇是用到DuiLib_Ultimate May 3, 2017版本(github地址:https://github.com/qdtroy/DuiLib_Ultimate/tree/master/DuiLib)
先看效果(这里是用到Alberl的Duilib入门教程写的界面,增加了CWaterUI控件):
话不多说,开始主题:
水纹的效果是基于第三方的代码,对第三方代码进行封装后,由于想要写的控件和Label很像,所以就选用继承Label的方式,以下是UIWater.h代码,其中CDib和CWaterEffect是第三方的库提供的类:
class UILIB_API CWaterUI : public CLabelUI {DECLARE_DUICONTROL(CWaterUI) public:CWaterUI(void);virtual ~CWaterUI(void);virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue) override;virtual LPCTSTR GetClass() const override;virtual LPVOID GetInterface(LPCTSTR pstrName) override;public: void DoInit() override; void SetVisible(bool bVisible = true) override;void SetInternVisible(bool bVisible = true) override; void DoPaint(HDC hDC, const RECT& rcPaint) override;void DoEvent(TEventUI& event) override;void SetPos(RECT rc, bool bNeedInvalidate = true)override;//设置控件位置并重绘 private: bool m_bUpdate; CDib m_renderSrc; CDib m_renderDest; CWaterEffect m_waterEffect; };
想要把自定义控件融入Duilib中,ControlFactory.h是非常关键的文件,让我们看看里面有什么内容
#pragma once#include <map>namespace DuiLib {typedef CControlUI* (*CreateClass)();typedef std::map<CDuiString, CreateClass> MAP_DUI_CTRATECLASS;class UILIB_API CControlFactory{public:CControlUI* CreateControl(CDuiString strClassName);void RegistControl(CDuiString strClassName, CreateClass pFunc);static CControlFactory* GetInstance();void Release();private:CControlFactory();virtual ~CControlFactory();private:MAP_DUI_CTRATECLASS m_mapControl;};//用于识别xml文件的空间名字 这是声明操作#define DECLARE_DUICONTROL(class_name)\public:\static CControlUI* CreateControl();//用于识别xml文件的空间名字 这是实现操作#define IMPLEMENT_DUICONTROL(class_name)\CControlUI* class_name::CreateControl()\{ return new class_name; }//用于在控件工厂对自定义控件进行注册#define REGIST_DUICONTROL(class_name)\CControlFactory::GetInstance()->RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);#define INNER_REGISTER_DUICONTROL(class_name)\RegistControl(_T(#class_name), (CreateClass)class_name::CreateControl);}
INNER_REGISTER_DUICONTROL(CWaterUI);
然后,只需要在配置xml中,加入类似这样一句(均来自于父类CLabelUI的属性,也可以自己在SetAttribute中实现)
<Water text="水波纹" textcolor="#FFeeeeee" align="center" valign="vcenter"/>
0 0
- Duilib创建添加自定义控件
- Duilib 创建自定义控件
- duilib中,子xml创建自定义控件
- duilib学习记录之创建自定义控件
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- Duilib中为RichEdit\Edit控件添加自定义右键菜单
- DuiLib实现自定义控件
- duilib自定义控件
- duilib开发基础:创建自定义控件的过程
- duilib开发基础:创建自定义控件的过程
- duilib创建自定义消息
- duilib 自定义控件1 CTileLayoutUI
- duilib中添加自定义控件之后怎么能够在xml文件中配置使用
- duilib 自定义控件TeamList 继承与CListUI
- 【duilib进阶】自定义控件响应指定命令
- c#创建自定义控件并给控件添加事件
- 如何创建自定义winForm控件 以及添加事件属性
- 在VS2008中创建自定义控件(九)添加属性
- 学习期迷茫 2015-08-31 (另一账号搬家)
- servlet图片验证码详细说明
- hadoop单节点环境搭建
- Canvas之translate、scale、rotate、skew方法讲解!
- gtk3.0学习笔记6-自定义绘图
- Duilib创建添加自定义控件
- 《SQL Server 性能优化与管理的艺术》笔记(一)
- JNDI学习总结(三)——Tomcat下使用Druid配置JNDI数据源
- Jenkins进阶系列之——06FTP publisher plugin插件下载(支持绝对路径)
- 数据结构实验——二叉树实验
- java反射机制及具体实现
- Android开发之Fragment回退栈
- poj 1322 概率dp
- PAT_1033. To Fill or Not to Fill