duilib创建自定义控件
我之前也写过一片封装xml为一个容器的文章,只是写的很随意,仅仅贴出了一个demo的地址。
在群里还有一些刚刚接触duilib的朋友们问到duilib自定义控件的问题,这里我转载一篇redrain大佬的博文。主要是这篇文章写的太好了,我们直接参考理解就好,我写的肯定没这个好。原文地址:http://blog.csdn.net/zhuhongshu/article/details/45362751。需要注意redrain大佬的这篇文章写的时间比较早,是基于早期的duilib版本,新版的duilib略有改动,我在下文中已经进行了修改。
一般来说,建立新控件后,最先应该重写的两个函数是GetClass和GetInterface。他们是用来区分控件的类型的虚函数,用于动态识别控件类型和做控件的类型转换。
- virtual LPVOID GetInterface(LPCTSTR pstrName);
virtual UINT GetControlFlags() const;
virtual HWND GetNativeWindow() const; - virtual void SetPos(RECT rc, bool bNeedInvalidate = true);
- virtual void DoInit();
- virtual void DoEvent(TEventUI& event);
- virtual bool DoPaint(HDC hDC, const RECT& rcPaint, CControlUI* pStopControl);
- virtual void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
- virtual void SetInternVisible(bool bVisible = true); // 仅供内部调用,有些UI拥有窗口句柄,需要重写
以上列出的函数,是最常被重写的。
- CControlUI* CDialogBuilder::Create(STRINGorID xml, LPCTSTR type, IDialogBuilderCallback* pCallback,
- CPaintManagerUI* pManager, CControlUI* pParent)
这个函数 的第一个参数指定为xml文件的路径;第二个参数一般指定为NULL,我这里不详解了;第三个参数,就是识别自定义控件的关键了,这个参数要指定为继承了IDialogBuilderCallback接口的类对象的指针,比如窗体类继承IDialogBuilderCallback,这个参数就填写窗体类对象的指针。只有填写了这个参数,自定义控件才会被识别,经常有人问自己的自定义控件为什么无法被识别。多数情况就是这里没处理好;第四个参数指定CPaintManagerUI类对象指针,这个肯定会伴随着窗体类对象一起存在。最后一个参数一般为NULL。
- m_hhWnd = CreateWindow(_T("#32770"), _T("WndMediaDisplay"), WS_VISIBLE | WS_CHILD, 0, 0, 0, 0, m_PaintManager.GetPaintWindow(), (HMENU)0, NULL, NULL);
然后在SetVisible等函数内控制子窗体的显示隐藏;在SetPos函数内控制子窗体的位置、限制在本控件的范围内。
- LPCTSTR GetWindowClassName() const;
- LPCTSTR GetSuperClassName() const;
duilib创建自定义控件相关推荐
- Duilib创建添加自定义控件
本篇参考资料:Duilib自定义控件博文(duilib开发基础:创建自定义控件的过程):http://blog.csdn.net/zhuhongshu/article/details/45362751 ...
- Android 第八课 创建自定义控件
常用控件和布局的继承结构,如下图: (待续....) 所有的控件都是直接或间接继承自View的,所用的所有布局都是直接或间接继承自ViewGroup的,View是Android中最基本的一种UI组件, ...
- 百度地图api之创建自定义控件
百度地图api,创建自定义控件 创建百度地图代码省略,直接上创建控件代码 js里边添加控件代码 /*** 自定义控件*/function addTitle(){function zoomControl ...
- 在ASP.NET中创建自定义控件初步(转)
假如你有大量的asp.net页面,在其中你会要求访问者选择一个邮政编码.然后,基于这个邮编,显示与之相关的城市和省份.这项功能可以通过一个包含邮政编码的dropdownlist控件来组织,或者可以通过 ...
- 【WinForm】创建自定义控件(转)
转自:http://www.cnblogs.com/bomo/archive/2012/12/09/2810559.html 虽然VS为我们提供了很多控件可以使用,但有时候这些控件仍然不能满足我们的要 ...
- Android开发系列之创建自定义控件
Android开发过程中我们经常需要定义自己的控件,一方面基于复用的角度考虑,一方面也是基于逻辑处理思维的角度考虑.在这篇博客里面,笔者想要介绍.总结几种Android自定义控件的方法,如果有什么不对 ...
- ios创建自定义控件必须具备的三个方法
1.当用代码创建控件时调用 -(instancetype)initWithFrame:(CGRect)frame { if (self = [super initWithFrame:frame]) { ...
- VS中创建自定义控件
第一步:创建一个ASP.NET WEB应用程序 第二步:在同一个解决方案中创建一个服务控件项目 2.1 再次创建一个asp.net web应用程序.如图: 2.2 然后在这个项目下创建一个Web窗体服 ...
- 用C#开发自定义控件一:创建自定义控件及类库并使用
CSharp开发自定义控件类库并测试的简单例子 最近想研究一下怎么编写CSharp的自定义控件,在此记录一下学习过程: 首先讲一下我的解决方案工程的组成: 首先打开VS(我的是VS2015)新建一个W ...
最新文章
- IDEA一定要懂的32条快捷键
- 如何和相亲对象无限聊天?程序员甩了这份架构图……| 每日趣闻
- node_modules
- 女儿学会走路了,是不是该教她学Python了?
- leetcode面试题 16.21. 交换和(二分查找)
- 信息学奥赛C++语言:输出判断
- 关于页面文件路径的问题
- javascript 回车实现 tab 切换功能完美解决
- ImageView.ScaleType 属性值
- .NET 常用ORM之SubSonic
- 爬虫学习之下载韩寒博客
- 误差柱状图的三种实现方法
- C语言中 1%3,算术什么意思啊 算数什么意思
- Java常用工具类-发短信(集成华软通信短信网关)
- cad应用技巧:图层特性管理器
- 值得和孩子一起看的100部BBC经典纪录片
- 蚂蚁算法python_蚁群算法python编程实现
- Linux树莓派开发——配置树莓派内核源码,内核编译,更换树莓派Linux内核
- 微信公众平台接口调试工具json格式不对怎么搞_腾讯云和微信推出更快速的小程序开发平台,微信读书小程序作示范...
- vmware 虚拟机使用windows的 http/socks 代理
热门文章
- iPhone 13维修换屏问题:芯片决定面容ID“生死”
- 软银在日本推物联网单车共享
- 【Docker】7、数据卷详解:具名挂载、匿名挂载、初识DockerFile、数据卷容器
- 测试hadoop集群的读写与计算能力
- ld --whole-archive 和 --no-whole-archive学习记录
- 2021年高处安装、维护、拆除多少钱及高处安装、维护、拆除模拟考试题
- P型硅与N型硅的区别
- 05-旭日X3派测评——Open Cv Pangolin等库安装ORB_SLAM2 安装运行
- 搜藏一个较全的数据集目录
- 无人值守安装linux7,CentOS7网络无人值守安装