第二章 DuiEngine资源文件介绍

一、初识DuiEngine的Skin Files

传统MFC界面主要是在一个.rc文件里进行窗口的布局,然后在resource.h中维系一个控件ID通过此控件ID在程序中通过此控件ID就可以访问到该控件,从而对指定控件做出各种操作;DuiEngine与之不同,但是思想仍然类似。以上章我们利用DuiEngineWizard生成的第一个工程为例:

DuiEngine将与界面相关的东西都扔到了一个叫Skin Files的文件夹里,其中:

1.image文件中主要用于存放工程中要使用到的相关图像,这个不要什么多余的讲解;

2.XML最为重要,里面存放两种东西:

<1>界面的布局(顺便提一下与传统界面不同的是DuiEngine布局主要是通过xml文件来实现的)

<2>为界面布局中控件提供样式支持,我暂且称其为样式文件(有点css的感觉但是又不太像,不知道为什么当时作者没有用xml+css做界面布局那),

3.index.xml文件(我暂且称其为资源文件命名表),相当于工程中资源文件的一张命名表。

二、我们需要关心的文件

DuiEngine的作者为我们编写了一个辅助的命令程序residbuilder2.exe来帮助我们构建工程所需的资源id。

由于DuiEngine的工程没有一份很好的说明,所以对于初学者来说很难搞清楚Skin Files中哪些文件需要我们的关心。为此我专门阅读了residbuilder2.exe的源码

以我们的第一节课的建立的工程FirstDuiEngineDemo为例,当我们重新构建项目时仔细观察编译器下方会出现如下命令:

"XXXX\duiengine\tool\residbuilder2.exe"  -i "XXXX\duiengine\FirsrtDuiEngineDemo\FirsrtDuiEngineDemo\skin\index.xml" -y –p

skin -r .\duires\winres.rc2 -n .\duires\name2id.xml -h .\duires\winres.h

下面我们就上面这条命令来详细解说各个文件的作用:

First

-i "XXXX\duiengine\FirsrtDuiEngineDemo\FirsrtDuiEngineDemo\skin\index.xml"

命令-i表示读取index.xml,即读取工程中资源文件命名表

<resid type="XML" name="IDR_DUI_INIT"  file="xml\init.xml"  />
<resid type="XML" name="IDR_DUI_MSGBOX"   file="xml\dlg_msgbox.xml"  />
<resid type="XML" name="IDR_DUI_MAIN_DIALOG"   layer="1" file="xml\dlg_main.xml"/>

<resid type="IMGX" name="IDP_MAIN_DLG_FRAME"    file="image\dlg_bg_frame.png"  />
<resid type="IMGX" name="IDP_BTN_WND_CHECKBOX"     file="image\btn_wnd_checkbox.png"/>
<resid type="IMGX" name="IDP_BTN_WND_RADIO"  file="image\btn_wnd_radio.png"   />
<resid type="IMGX" name="IDP_FOCUS_CHECK"    file="image\focus_checkbox.png"/>
<resid type="IMGX" name="IDP_FOCUS_RADIO"    file="image\focus_radio.png"   />
<resid type="IMGX" name="IDP_BORDER_EDIT"    file="image\img_edit_border.png"   />

<resid type="IMGX" name="IDP_BTN_SYS_CLOSE"   file="image\btn_sys_close.png"    />
<resid type="IMGX" name="IDP_SCROLL"   file="image\scrollbar.bmp" />

其中主要存放了工程中所要用到的各种类型资源文件命名,DuiEngine支持一下一种资源文件类型定义:

XML:例如我们界面布局文件和样式文件都是XML类型的

ICO:图标资源

BMP:位图资源

IMGX:GDI+图片资源,当然位图也可以使用这种类型

细心的朋友可能看到了,在XML类型中name = IDR_DUI_MAIN_DIALOG后面有一个属性为layer = 1,它的作用我将过会做出说明

Second

-y –p skin

-y表示强制改写标志(说实话我也没搞懂什么意思)

-p表示设置当前路径为skin目录下

Three

-r .\duires\winres.rc2

表示将index.xml文件中的内容格式化到资源文件winres.rc2文件中

DEFINE_XML(IDR_DUI_INIT,	"skin\\xml\\init.xml")
DEFINE_XML(IDR_DUI_MSGBOX,	"skin\\xml\\dlg_msgbox.xml")
DEFINE_XML(IDR_DUI_MAIN_DIALOG,	"skin\\xml\\dlg_main.xml")
DEFINE_IMGX(IDP_MAIN_DLG_FRAME,	"skin\\image\\dlg_bg_frame.png")
DEFINE_IMGX(IDP_BTN_WND_CHECKBOX,	"skin\\image\\btn_wnd_checkbox.png")
DEFINE_IMGX(IDP_BTN_WND_RADIO,	"skin\\image\\btn_wnd_radio.png")
DEFINE_IMGX(IDP_FOCUS_CHECK,	"skin\\image\\focus_checkbox.png")
DEFINE_IMGX(IDP_FOCUS_RADIO,	"skin\\image\\focus_radio.png")
DEFINE_IMGX(IDP_BORDER_EDIT,	"skin\\image\\img_edit_border.png")
DEFINE_IMGX(IDP_BTN_SYS_CLOSE,	"skin\\image\\btn_sys_close.png")
DEFINE_IMGX(IDP_SCROLL,	"skin\\image\\scrollbar.bmp")

Four

-n .\duires\name2id.xml

表示将index.xml中XML资源中(布局文件XML)且属性中带有layer = ‘‘1"中的控件name转化为相应id存放到当前文件中,我们还记得在index.xml中为IDR_DUI_MAIN_DIALOG设置了layer="1"

所以这里将根据dlg_main.xml中控件的name属性生成其id对照存放到name2id.xml文件中

生成的name2id.xml内容如下:

<name2id name="DUI-DEMO" id="65536" />
<name2id name="maindlg" id="65537" />
<name2id name="btn_close" id="1" />
<name2id name="btn_msgbox" id="65538" />

Five

-h .\duires\winres.h

只有在生成项目时选择了“支持ID系统”才会出现此命令。

其内容与name2id.xml是一致的,只是采用#define宏定义格式

/*<------------------------------------------------------------------------------------------------->*/
/*该文件由residbuilder2生成,请不要手动修改*/
/*<------------------------------------------------------------------------------------------------->*/
#define	DUI-DEMO		65536
#define	maindlg		65537
#define	btn_close		1
#define	btn_msgbox		65538

第二章 DuiEngine资源文件介绍

时间: 2024-10-08 20:38:08

第二章 DuiEngine资源文件介绍的相关文章

Mybatis源码分析(第二章)------映射文件的解析(1)

2.1 映射文件解析过程分析 MyBatis 的配置文件由 XMLConfigBuilder 的 parseConfiguration 进行解析,该方法依次解析了 <properties>.<settings>.<typeAliases> 等节点.至于 <mappers> 节点,parseConfiguration 则是在方法的结尾对其进行了解析.该部分的解析逻辑封装在 mapperElement 方法中: 1 private void mapperElem

第二章:JMeter 的介绍

1. jMeter 的历史: Apache Jmeter 是 100%的java桌面应用程序,用于对软件做压力测试. 2. Jmeter的测试范围:对于静态和动态资源(文件,Servlet,Perl脚本,Java对象,数据库和查询,FTP服务器)的性能测试. 3. JMeter支持对多种服务器类型进行测试. 支持通过录制.回放方式获取测试脚本

第二章—在HTML文件中添加JavaScript

一.运行脚本的最常见方式是在HTML文档中使用HTML<script>和</script>标记,在HTML文档的头部和主体部分加入均可. 二.<script>标记有6中特性:type.language(已不建议使用).charset(大多数浏览器不识别,不建议使用).src.defer(defer告诉浏览器正常加载外部脚本文件,但直到页面完全解析即</html>标记被加载之后才执行脚本).async(告诉浏览器可以不等待脚本的加载,而继续加载其他代码,在文档

第二章 Scorpio-CSharp基础语法介绍 语法篇

1. if 1 var a = 300 3 if (a == 100) { 5 print(100) 7 } else if (a == 200) { 9 print(200) 11 } elif (a == 300) { 13 print(300) 15 } elseif (a == 400) { 17 print(400) 19 } else { 21 print(0) 23 } else if(有空格) 和 elif 和 elseif(无空格)  三种写法都可以使用,都当作 else if

《RESTful Web Services》第二章 识别资源

引言:开放RESTful Web服务的首要步骤之一是设计资源模型. 2.1 如何从领域名词中识别资源 2.2 如何选择资源粒度 一些因素会影响数据库表和对象模型的设计,例如领域建模.需要高效数据访问和处理.应该以适合客户端使用模式的方式来设计资源,而不是基于现有的数据库或对象模型.可缓存性.修改频率.可变性可能会进一步影响资源粒度.

第六章、epub文件处理 -- 解析container文件与.opf文件

第六章.epub文件处理 -- 解析container文件与.opf文件 这一章我们会接着第三章结尾介绍的FBReaderApp类的openBookInternal继续,开始介绍解析container文件与.opf文件. 这一章中会涉及到第二章.第四章.第五章中介绍的内容,大家可以互相参照,加深理解 首先,我们来回顾下第四章"epub文件处理 -- epub文件内部组成"的内容.我们在第四章中曾经介绍过,epub文内部包含的文件包括"container.xml文件..opf文

ABP官方文档翻译 6.5 内嵌资源文件

内嵌资源文件 介绍 创建内嵌文件 xproj/project.json形式 csproj形式 添加内嵌资源管理器 使用内嵌视图 使用内嵌资源 ASP.NET Core 配置 忽略文件 重写内嵌文件 介绍 ABP提供了一种简单的方式在web应用中使用内嵌Razor视图(.cshtml文件)和其他资源(css,js,img...files).你可以使用这个特征创建包含UI功能的plugins/modules. 创建内嵌文件 首先,我们要创建一个文件并标记它为嵌入资源.任何程序集都可以包含嵌入资源.p

.Net资源文件全球化

I:本博文代码示例效果图 好久没来写随笔了.不多说先上大饼!  跟着直接上 [代码下载地址] II:ASP.NET 资源文件介绍 在ASP.NET特殊文件夹内有那么两个不太引人注意,他们分别是App_GlobalResources, App_LocalResources.  资源文件命名规则: {文件名}.{区域}.resx {区域}这一个是可以忽略的.当忽略{区域}时,如果Page.UICulture跟资源文件内所提供的{区域}都对不上号时,将会以没有设置{区域}的资源文件去呈现. 例如当Pa

随便玩玩之PostgreSQL(第二章)单表数据查询

未经授权不得转载 第二章 单表数据查询数据库的基本功能就是数据增查改删,倘若不可以,要她还有什么意义.数据查询功能不仅仅是查询,而且还能筛选,并且格式化显示.数据查询使用SELECT语句,本章介绍如何使用SELECT查询(列出)数据库中的数据. 2.1查询数据库cj表中全部信息方法一:使用"*"通配符查询所有数据(所有字段数据). SELECT * FROM cj; 结果如图. 方法二:制定所有字段(列名).每个字段用逗号(,)隔开. SELECT id,kc,bj,xm,yw,sx,