duilib中加入自己定义控件之后怎么可以在xml文件里配置使用
加入自己定义控件可能有两种不同的情况:
1、 在duilib库中加入的自己定义控件。
2、 在我们的应用程序中自己重写了一个控件。
以下開始解说不同的情况下怎么才干支持在xml文件配置控件:
1、 库中情况
假如自己定义的控件是CGifUI类。
库中情况相对是比較简单的,仅仅需在分析xml文件时候将控件创建出来即可了,所以我找到的函数是CControlUI*
CDialogBuilder::_Parse(CMarkupNode*
pRoot, CControlUI*
pParent, CPaintManagerUI*
pManager)。这个函数中加入例如以下的代码:
SIZE_T cchLen =
_tcslen(pstrClass);
switch( cchLen ) {
case 3:
if (_tcscmp(pstrClass,
DUI_CTR_GIF) == 0) pControl =
new CGifUI;
// 以下这个宏定义就是xml中配置的配置项相应
#define DUI_CTR_GIF (_T("Gif"))
2、 库外情况
假如自己定义控件是CTransportTaskLayout 类
库外的情况。可能就麻烦一些了。首先我们在载入xml文件的时候要调用以下的函数:
CControlUI* Create(STRINGorID xml,
LPCTSTR type =
NULL,
IDialogBuilderCallback* pCallback =
NULL,
CPaintManagerUI* pManager =
NULL,
CControlUI* pParent =
NULL);
在这个函数中和此处有关的參数就是IDialogBuilderCallback* pCallback。
首先要明白一点是这个控件是在duilib中不能被接受的。所以仅仅能在外宅里养着了。至于怎么养让我以下给你细细的说来。尽管说家里面是不接受的。可是我们自己必须接受这个事实,所以我们必须想办法解决问题,那就会从上面的那个參数開始着手了。我看CControlUI*
CDialogBuilder::_Parse这个函数能够知道。假设在原有的duilib库中不接受这样的控件类型,会一直到函数的后面调用 pControl = m_pCallback->CreateControl(pstrClass);
。这里就给我们给外宅转正的机会了,所以我们自己会能够重写一个IDialogBuilderCallback类,然后重写类里的CreateControl函数,创建我们自己新控件了。以下给出在项目中用到的代码:
class
CTransportTaskBuilderCallBack : public
IDialogBuilderCallback
{
public:
CTransportTaskBuilderCallBack(){};
virtual
CControlUI* CreateControl(LPCTSTR
pstrClass)
{
if (_tcscmp(pstrClass,
_T("TransportTaskLayout")) == 0)
{
CTransportTaskLayout * pLayout = (CTransportTaskLayout*)g_TransportListUICenter->CreateLayoutInstance(_T("TransportTaskLayout"));
return pLayout;
}
return
NULL;
}
};
上面这个类就是假设在xml文件里发现了"TransportTaskLayout"字符串,就会创建CTransportTaskLayout类的对象。
到这里外宅已经被转正了。现实生活中就没有这么美的事了。要转正是会出人命的。
duilib中加入自己定义控件之后怎么可以在xml文件里配置使用的更多相关文章
- Android自己定义控件
今天我们来讲一下 Android中自己定义控件的介绍,在Android中, 我们一般写xml都是用的是单个的控件来完毕的 ,但是.往往在一些项目中.单个控件有时是满足不了的.故此我们能够自己定义控件 ...
- Android自己定义控件之轮播图控件
背景 近期要做一个轮播图的效果.网上看了几篇文章.基本上都能找到实现,效果还挺不错,可是在写的时候感觉每次都要单独去又一次在Activity里写一堆代码.于是自己封装了一下.这里仅仅是做了下封装成一个 ...
- Maven中pom.xml文件的配置
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...
- Android中如何利用attrs和styles定义控件
一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我设置了一个TextView,给它设置了 textColor,它就能够改变这个TextView的文本的 ...
- OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加,连减,连除,连乘)
OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加.连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewControll ...
- Android自定义控件1--自定义控件介绍
Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...
- 怎样在VS2013/MFC中使用TeeChart绘图控件
TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在V ...
- [转] c#中 多线程访问winform控件
原文 c#中多线程访问winform控件的若干问题小结 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的 ...
- Android自己定义控件之应用程序首页轮播图
如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
随机推荐
- TCPClient、TCPListener的用法
支持Http.Tcp和Udp的类组成了TCP/IP三层模型(请求响应层.应用协议层.传输层)的中间层-应用协议层,该层的类比位于最底层的Socket类提供了更高层次的抽象,它们封装 TCP 和 UDP ...
- MVC之参数验证(一)
ASP.NET MVC采用Model绑定为目标Action生成了相应的参数列表,但是在真正执行目标Action方法之前,还需要对绑定的参数实施验证以确保其数据的准确性.总地来说,我们可以采用Syste ...
- HTML——meta
http://www.cnblogs.com/jr1993/p/4542862.html
- .ai域名注册已经极具投资价值进入火爆期
最近G.ai以六位数的天价被国内域名收藏家收入囊中,间接说明了.ai域名的价值不断攀升,自从2016年AlphaGo胜利以来,人工智能几乎成为人人谈资,而由于.com域名被挖掘待尽,一些聪明的人工智能 ...
- Vue指令1:v-text及v-html
v-text: //插入一段文本<div id="app"> <p v-text="message"></p></di ...
- JavaScript 中实现 sleep
来自推特上 Windows 故障分析的笑话 图片来源:me.me 推上看到的笑话,Windows 故障分析的实现. 然后想起来 JavaScript 中如何实现这个 sleep() 函数让代码暂停指定 ...
- 09Java Server Pages 错误处理
Java Server Pages 错误处理 通常JSP在执行的时候,在两个阶段会发生错误.第一个是JSP网页转译成Servlet类的时候,另一个就是Servlet类处理每一个请求的时候.在第一个阶段 ...
- luogu P3899 [湖南集训]谈笑风生 线段树合并
Code: #include<bits/stdc++.h> #define maxn 300002 #define ll long long using namespace std; vo ...
- JAVA基础——异常--解析
简介 异常处理是java语言的重要特性之一,<Three Rules for effective Exception Handling>一文中是这么解释的:它主要帮助我们在debug的 ...
- ionic3视频播放功能
因为项目的需要,需要使用视频播放的功能,使用的是videogular2插件,但是报了一个无法识别video-player 这个标签,百度了很多,发现原来是版本 不对,ionic3是以来angular5 ...