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应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...
随机推荐
- Spring.Net学习笔记(八)-设置配置文件参数
一.开发环境 VS2013 .netframework4.5 spring.net1.3.1 二.项目结构 三.开发过程 1.编写Person类 namespace SpringNetConfigAr ...
- Verification Mind Games---how to think like a verifier像验证工程师一样思考
1. 有效的验证需要验证工程师使用不同于设计者的思维方式思考问题.具体来说,验证更加关心在严格遵循协议的基础上发现设计里面的bug,搜索corner cases,对设计的不一致要保持零容忍的态度. m ...
- Farseer.net轻量级开源框架 入门篇:逻辑层的选择
导航 目 录:Farseer.net轻量级开源框架 目录 上一篇:Farseer.net轻量级开源框架 入门篇: 入门篇:增.删.改.查操作演示 下一篇:Farseer.net轻量级开源框架 入门 ...
- 【译】x86程序员手册26-7.5任务切换
7.5 Task Switching 任务切换 The 80386 switches execution to another task in any of four cases: 80386在以下四 ...
- ubuntu+ngnix+thinkphp pathinfo配置
一.thinkphp 项目改为pathinfo模式 XXX/ThinkPHP/Conf/convention.php文件中找到 'URL_MODEL' => 1, // URL访问模式,可选参数 ...
- Vue指令7:v-model
可以用 v-model 指令在表单控件元素上创建双向数据绑定. v-model 会忽略所有表单元素的 value.checked.selected 特性的初始值. 因为它会选择 Vue 实例数据来作为 ...
- HDU多校Round 5
Solved:3 rank:71 E. Everything Has Changed #include <bits/stdc++.h> using namespace std; const ...
- jquery onclick 问题
var str = ''; for(var i = 0;i<data.list.length;i++){ str += "<tr><td>" + (i ...
- JAVA学习笔记16——线程生命周期
当线程被创建并启动以后,它既不是一启动就进入了执行状态,也不是一直处于执行状态,在线程的生命周期中,它要经过新建(New).就绪(Runnable).运行(Running).阻塞(Blocking)和 ...
- vivo手机执行input命令提示killed
异常现象: 使用vivo手机时发现通过inputManager发送按键.执行屏幕滑动等动作失效,相关API并没有任何异常抛出,继续跟踪发现shell控制台执行input进行屏幕滑动.发送文本.模拟按键 ...