加入自己定义控件可能有两种不同的情况:

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文件里配置使用的更多相关文章

  1. Android自己定义控件

    今天我们来讲一下 Android中自己定义控件的介绍,在Android中, 我们一般写xml都是用的是单个的控件来完毕的 ,但是.往往在一些项目中.单个控件有时是满足不了的.故此我们能够自己定义控件 ...

  2. Android自己定义控件之轮播图控件

    背景 近期要做一个轮播图的效果.网上看了几篇文章.基本上都能找到实现,效果还挺不错,可是在写的时候感觉每次都要单独去又一次在Activity里写一堆代码.于是自己封装了一下.这里仅仅是做了下封装成一个 ...

  3. Maven中pom.xml文件的配置

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  4. Android中如何利用attrs和styles定义控件

    一直有个问题就是,Android中是如何通过布局文件,就能实现控件效果的不同呢?比如在布局文件中,我设置了一个TextView,给它设置了 textColor,它就能够改变这个TextView的文本的 ...

  5. OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加,连减,连除,连乘)

    OC中使用UI自己定义控件实现计算器的设计(版本号1简单的加减乘除,连加.连减,连除,连乘) #import <UIKit/UIKit.h> @interface ViewControll ...

  6. Android自定义控件1--自定义控件介绍

    Android控件基本介绍 Android本身提供了很多控件比如我们常用的有文本控件TextView和EditText:按钮控件Button和ImageButton状态开关按钮ToggleButton ...

  7. 怎样在VS2013/MFC中使用TeeChart绘图控件

    TeeChart作为一款强大好用的绘图控件,通过它可以绘制出各式各样的图表,包括2D的,还有3D的,绘制的图表美观实用,这里主要讲述如何在VS2013/MFC中使用TeeChart控件,顺便说一下在V ...

  8. [转] c#中 多线程访问winform控件

    原文 c#中多线程访问winform控件的若干问题小结 我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题.然而我们并不能用传统方法来解决这个问题,下面我将详细的 ...

  9. Android自己定义控件之应用程序首页轮播图

    如今基本上大多数的Android应用程序的首页都有轮播图.就是像下图这种(此图为转载的一篇博文中的图.拿来直接用了): 像这种组件我相信大多数的应用程序都会使用到,本文就是自己定义一个这种组件,能够动 ...

随机推荐

  1. sublime text 3 使用技巧

    一.下载 官网下载合适的版本(http://www.sublimetext.com/3) 二.破解 执行 Help->Enter license 粘贴你的License代码 ----- BEGI ...

  2. Android ViewPager+HorizontalScrollView实现标题栏滑动(腾讯新闻)

    1) ViewPager提供了左右滑动切换页面的方法,但是它所提供的标题只是无语,估计没有真正的项目会照搬拿过来;并且它只能一页一页滑,我想直接查看最后一页要滑半天; 2) 看了腾讯新闻客户端感觉体验 ...

  3. Selenium示例集锦--常见元素识别方法、下拉框、文本域及富文本框、鼠标操作、一组元素定位、弹窗、多窗口处理、JS、frame、文件上传和下载

    元素定位及其他操作 0.常见的识别元素的方法是什么? driver.find_element_by_id() driver.find_element_by_name() driver.find_ele ...

  4. js文件中引用其他js文件

    这一个功能的作用是做自己的js包时,可以通过引入一个整体的js文件而引入其他js. 只需要在总体的js加上这一句话 document.write("<script type='text ...

  5. Angular——内置服务

    $location <!DOCTYPE html> <html lang="en" ng-app="App"> <head> ...

  6. CAD二次开发控件,dwg控件,网页DWG控件,手机浏览编辑DWG控件

    梦想绘图插件5.2(MxDraw5.2) 是国内最强,最专业的CAD开发插件(控件),不需要AutoCAD就能独立运行. 控件使用VC 2010开发,具有30万行代码规模,最早从2007年第一个版本完 ...

  7. 梦想CAD控件图块COM接口知识点

    梦想CAD控件图块COM接口知识点 图块是将多个实体组合成一个整体,并给这个整体命名保存,在以后的图形编辑中图块就被视为一个实体.一个图块包括可见的实体如线.圆.圆弧以及可见或不可见的属性数据.图块的 ...

  8. layer iframe层弹出图片

    这个js是在一个layer iframe弹出层中,点击按钮弹出图片

  9. 王垠代表作《完全用Linux工作》

    完全用Linux工作-王垠   <完全用Linux工作>作者:王垠 完全用 GNU/Linux 工作 理解 GNU/Linux 更多精彩请直接访问SkySeraph个人站点:www.sky ...

  10. 03匿名内部类、eclipse快捷键、String相关知识

    03匿名内部类.eclipse快捷键.String相关知识-2018.7.11 1.匿名内部类(只针对重写一个方法时候使用,不能向下转型,因为没有子类类名) new Inter(){ public v ...