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应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
随机推荐
- 【Android开发】XML文件解析
最近在做一个项目,涉及到XML文件的解析,废话不多说,如下: 读取 private ArrayList<Data> readXMLLocked() { File file = new Fi ...
- Angular——依赖注入
基本介绍 1.AngularJS采用模块化的方式组织代码,将一些通用逻辑封装成一个对象或函数,实现最大程度的复用,这导致了使用者和被使用者之间存在依赖关系. 2.所谓依赖注入是指在运行时自动查找依赖关 ...
- 常用css属性总结
边框修饰:border------>top,bottom,left,right上下左右边框 分为:color,类型style{ groove,dashed,ridge,solid}一个值---- ...
- IOS 11,UIWebView内容随状态栏高度下移,导致状态栏不透明
解决方案: 方法1:在html中设置 <meta name="viewport" content="viewport-fit=cover,maximum-scale ...
- 牛客多校Round 2
Solved:3 rank:187 H.travel 题意:给一颗带有点权的树 找三条不相交的链 使得点权最大 题解:使用树形DP dp[x][i][0/1] 表示x节点选择i条链 有没有经过x的链 ...
- 【 jquery 】常用
$("#input1").show('slide'); 渐进显示$("#input1").hide('slide'); 渐进隐藏 siblings ...
- JavaScript--小白入门篇3
一.函数 1.1 初步认识函数 1 <script type="text/javascript"> 2 console.log("你好"); 3 s ...
- NOIp2017——追求那些我一直追求的
谨以此祭奠我即将爆炸的NOIP2017. $Mingqi\_H\ \ 2017.09.24$ Day -47 突然发现半年来自己从来没有写对过SPFA,最近几天才发现自己的板子一直是错的...赶紧找个 ...
- 「 Luogu P1850 」 换教室
解题思路 很明显的是个期望 $dp$. 先前想到 $dp[i][j]$ 表示第决策到第 $i$ 个时间段,已经进行了 $j$ 次申请,然后就没有然后了,因为这根本就没法转移啊,你又不知道前 $i-1$ ...
- 39页第3题 求x的n次幂
/*计算x的n次幂*/ #include<stdio.h> main(void) { int i,n; double x,y; printf("Enter x:");/ ...