DuiVision开发教程(3)-XML资源文件定义介绍

全局资源定义-resource.xml

基于DuiVision界面库的程序,需要有一个默认的资源定义XML文件,此文件默认的位置是exe文件所在路径下的xml\resource.xml文件,如果使用了zip压缩文件来保存所有资源文件,则此文件的位置是在压缩包中的xml\resource.xml文件。此文件中可以定义程序的全局配置、XML文件、字体、图片、文字等资源,示例如下:

<?xml version="1.0" encoding="utf-8"?>
<root>

<!--系统配置-->
<res type="cfg" name="defaultStyle" value="" />
<res type="cfg" name="logfile" value="demoui.log" />
<res type="cfg" name="loglevel" value="1" />
<res type="cfg" name="appMutex" value="MUTEX_DUIVISION_DEMO" />
<res type="cfg" name="enableDragFile" value="1" />
<res type="cfg" name="trayDbClickMsg" value="0" />

<!--风格设置-->
<res type="style" name="default" value="" />
<res type="style" name="qq" value="qq" />

<!—嵌套的XML资源定义文件-->
<res type="res" lang="zh-cn" file="xml\def_string_zh-cn.xml" />
<res type="res" lang="en-us" file="xml\def_string_en-us.xml" />

<!--XML资源-->
<res type="xml" name="dlg_main" file="xml\dlg_main.xml" />
<res type="xml" name="dlg_skin" file="xml\dlg_skin.xml" />
<res type="xml" name="dlg_about" file="xml\dlg_about.xml" />
<res type="xml" name="dlg_login" file="xml\dlg_login.xml" />
<res type="xml" name="dlg_msgbox" file="xml\dlg_msgbox.xml" />

<!--字体资源-->
<res type="font" lang="zh-cn" name="default" font="微软雅黑" size="12" bold="false" />
<res type="font" lang="zh-cn" name="big" font="微软雅黑" size="14" bold="true" italic="false" underline="false" strikeout="false" />

<!--图片资源-->
<res type="img" name="IDB_MAIN_FRAME" file="skins\WindowsBack.png" />
<res type="img" name="IDB_BT_CLOSE" file="skins\BT_CLOSE.png" />
<res type="img" name="IDB_BT_MIN" file="skins\BT_MIN.png" />
<res type="img" name="IDB_BT_MENU" file="skins\BT_MENU.png" />
<res type="img" name="IDB_BT_SKIN" file="skins\BT_SKIN.png" />

<res type="img" name="IDB_TAB_1" file="skins\Tab1.png" />
<res type="img" name="IDB_TAB_2" file="skins\Tab2.png" />

<res type="img" name="IDB_ICON_INFO" file="skins\info.png" />
<res type="img" name="IDB_ICON_WARN" file="skins\warning.png" />
<res type="img" name="IDB_ICON_ERROR" file="skins\error.png" />

<res type="img" name="IDB_MENU_UPDATE" file="skins\MENU_UPDATE.png" />

<!--字符串资源-->
<res type="str" lang="zh-cn" name="APP_NAME" value="DUI测试程序" />
<res type="str" lang="zh-cn" name="APP_VER" value="1.0.0.1" />
<res type="str" lang="zh-cn" name="OK" value="确定" />
<res type="str" lang="zh-cn" name="CANCEL" value="放弃" />
<res type="str" lang="zh-cn" name="LOGIN" value="登录" />

</root>

这些定义的说明如下:

1、全局配置定义

Xml的type是cfg,目前支持的配置如下:

logfile – 日志文件名,是相对exe的路径的文件名,如果未定义,则不会生成日志文件

loglevel – 日志级别,1表示调试级别,2表示信息级别,4表示错误级别,8表示致命级别

defaultStyle – 默认的风格,resource.xml中的每个资源定义都可以加一个style属性,通过style属性指定这条资源定义是针对哪种风格的,只有和当前的风格相同的资源或者默认风格的资源才会被加载,资源定义中指定风格的例子如下:

<res type="xml" style="qq" name="dlg_main" file="xml\dlg_wnd.xml" />

appMutex – 应用程序互斥量的名字,如果指定了此变量,则应用程序只能创建一个运行的进程,第二个进程运行时候判断如果存在此名字的互斥量,则退出

enableDragFile – 是否允许拖拽一个图片文件到程序窗口来指定当前使用的背景图片

trayDbClickMsg – 在托盘图标双击是否发送消息,用于重新定义托盘图标双击的行为,托盘图标双击的默认行为是打开程序的主窗口,如果此变量设置为1,则双击托盘图标会给应用程序发送一个DUI消息,消息类型为MSG_TRAY_DBCLICK,消息的发送方ID和名字分别是TRAY_ICON和NAME_TRAY_ICON,可以在DUI消息处理类中增加对此消息的处理,来实现自定义的双击动作

2、风格定义

type是style,name是风格的名字,仅用于说明,value是风格的值,每个资源定义中的style对应的是风格的value部分。

资源XML中所有的定义都可以加一个style属性来指定当前定义是针对特定风格的,如果和当前的风格一致,则使用此定义覆盖之前的未指定风格的同名的定义。

例如下面的两个定义是定义的名为IDB_SCROLL_V的图片资源,一个是缺省定义,一个是针对qq风格的定义,如果当前不是qq风格,就会用前一个定义,如果当前是qq风格,就会用针对qq风格的定义,如果当前是qq风格,但没有第二行针对qq风格的定义,则也会使用第一行的缺省定义。

<res type="img" name="IDB_SCROLL_V" file="skins\default\SCROLL_V.png" />
<res type="img" style="qq" name="IDB_SCROLL_V" file="skins\qq\SCROLL_V.png" />

3、资源文件定义

Type是res,用于加载嵌套的资源定义文件,file是对应的文件路径名,是相对exe所在的路径,通过lang属性可以指定此资源文件仅针对哪种语言。

4、xml文件定义

Type是xml,name是其他地方引用时候的名字,file是对应的文件路径名,是相对exe所在的路径。

5、字体定义

Type是font,lang表示是针对哪种语言的字体。其他属性说明:

name – 字体定义名,在其他地方用名字进行引用

font – 字体名

size – 文字大小

bold – 是否粗体(true|false)

italic– 是否斜体(true|false)

underline – 显示下划线(true|false)

strikeout – 显示删除线(true|false)

os – 表示此字体定义适用于哪些操作系统,例如os=”winxp,win7”表示此定义仅针对xp和win7操作系统,可用的操作系统名字符串包括win98、winme、winnt、win2000、winxp、win2003、vista、win7、win8。

6、图片资源定义

Type是img,name是其他地方引用时候的名字,file是对应的文件路径名,是相对exe所在的路径。

7、字符串资源定义

Type是str,lang表示是针对哪种语言的字体,name是其他地方引用时候的名字,value是字符串内容。

定义的字符串资源可以在各个空间的title属性中引用,引用时候要用[]包围,例如title=”[APP_NAME]”就可以在title中引用APP_NAME对应的字符串。

8、资源中的多语言定义

资源定义xml中每一项都可以指定语言,如果定义中有lang属性,则表示这条定义是针对哪种语言的,如果和当前语言不相符,则不会被加载。

对话框定义文件

程序中所有界面都是基于对话框或菜单等窗口的,每个对话框都需要有一个XML定义文件,用于描述对话框中的内容,对话框中主要是组成对话框的各个控件的定义,对话框的XML定义示例如下:

<?xml version="1.0" encoding="utf-8"?>
<dlg name="dlg_about" title="MsgBox" width="450" height="230" appwin="1" resize="1" translucent="245" frame="" bkimg="skin:SKIN_PIC_7" crbk="000000" >
    <base>
        <imgbtn name="button.close" pos="-45,0,-0,29" skin="IDB_BT_CLOSE" show="1"/>
        <text name="title" crtext="FFFFFF" crmark="800000" font="big"
                pos="10,5,200,25" title="关于[APP_NAME]" mask="[APP_NAME]" response="0" show="1" />
    </base>
    <body>
        <area name="area-1" pos="0,0,-0,40" begin-transparent="100" end-transparent="30" />
        <area name="area-2" pos="0,40,-0,-0" begin-transparent="30" end-transparent="30" />
        <area name="area-3" pos="0,-37,-0,-36" begin-transparent="70" end-transparent="70" />
        <area name="area-4" pos="0,-36,-0,-0" begin-transparent="88" end-transparent="88" />
        <img name="icon" pos="25,45" width="128" height="128" image="skins\scriptnet.jpg" mode="normal" framesize="0" response="0" show="1" />
        <text crtext="000000" pos="170,45,-25,65" title="[APP_NAME] [APP_VER]" />
        <text crtext="000000" pos="170,65,-25,85" title="2013-2014" />
        <linkbtn name="linkbtn1" crtext="800000"
            pos="170,100,-25,130" show="1" title="http://www.blueantstudio.net" href="http://www.blueantstudio.net" />
        <button name="button.ok" skin="IDB_BT_DEFAULT" title="[OK]" pos="-100,-30,-20,-6" show="1" />
    </body>
</dlg>

其中由几部分组成,dlg标签是对话框自身一些属性的描述,可以设置对话框的大小、背景图片、蒙版图片、透明度、应用程序窗口属性、改变大小属性等;

base标签下面的内容都是属于对话框的基础控件,一般可以把对话框的标题和关闭按钮等放在基础控件部分定义;

body标签下面的内容是属于对话框的普通控件,除了基础控件之外,其他内容都放在body标签下面定义。

base和body下面都是具体控件的定义描述,可以参考后面关于每个控件的属性说明。

以上对话框XML定义的界面效果如下:

菜单定义文件

菜单也是通过XML文件来定义,菜单XML的定义示例如下:

<?xml version="1.0" encoding="utf-8"?>
<menu title="TrayMenu" width="250" item-height="25" left="30"
    frame-width="0" top-height="72" bottom-height="30"
    bkmode="mid" width-lt="5" height-lt="70" width-rb="5" height-rb="30"
    bkimg="skins\menu\360TrayMenu_218.png" >

    <text pos="10,5,-10,25" crtext="FFFFFF" font="bold" title="DUI托盘菜单" />
    <img pos="-60,5" width="48" height="48" image="skins\icon\Movies.png"
        mode="normal" framesize="1" tip="图片" />
    <text pos="10,-25,-10,-5" crtext="808080" font="bold" title="蓝蚂蚁工作室" />

    <menuitem name="restore_mainwnd" skin="" image="" title="恢复窗口" font="bold" action="show-window:dlg_main" />
    <menuitem separator="1" skin="IDB_MENU_SEP" />
    <menuitem name="menu_main" menu="menu_main" />
    <menuitem name="menuitem.sub" title="子菜单" width="150" skin="IDB_MENU_ARROW"
        bkmode="frame" bkimg="skin:IDB_MENU_BACK" frame-width="3" top-height="0" bottom-height="0" >
        <menuitem name="360safe" title="360安全卫士" action="dlg:dlg_login" />
        <menuitem name="360sd" title="360杀毒" action="dlg:dlg_login" />
        <menuitem name="menuitem.360.sub1" title="360工具" width="150" skin="IDB_MENU_ARROW"
            bkmode="frame" bkimg="skin:IDB_MENU_BACK" frame-width="3" top-height="0" bottom-height="0" >
            <menuitem name="360driver" title="360驱动修复" action="dlg:dlg_login" />
            <menuitem name="360soft" title="360软件管家" action="dlg:dlg_login" />
        </menuitem>
    </menuitem>
    <menuitem name="menuitem.runtest" title="执行进程" action="run:{platpath}DuiVisionDemo.2008d.exe|testcmd" />
    <menuitem separator="1" skin="IDB_MENU_SEP" />
    <menuitem name="item_help" skin="IDB_MENU_HELP" img-count="3" title="帮助" action="link:http://www.blueantstudio.net" />
    <menuitem separator="1" skin="IDB_MENU_SEP" />
    <menuitem name="close_app" skin="" image="" title="退出" action="close-window:dlg_main" />

</menu>

菜单定义文件的根节点是menu节点,menu节点可以定义一些菜单的属性,包括菜单的大小、图标区域的宽度、背景图片等。

menu节点下面是每个菜单项和控件的定义,菜单项一般用menuitem标签进行定义,除了菜单项之外,还可以定义菜单分隔线,以及其他的控件,例如图片控件。

菜单的显示区域可以分为3段,中间是菜单项部分,上面和下面是可以显示其他控件的区域,如果要在底部区域显示图片、文字等控件,这些控件的位置定义中的Y坐标都应该使用负数来定义。

以上菜单定义文件的实际显示效果如下:

时间: 2024-10-08 16:42:16

DuiVision开发教程(3)-XML资源文件定义介绍的相关文章

DuiVision开发教程(2)-如何写一个简单的界面程序

基于DuiVision界面库开发的界面程序主要包括如下几部分内容: 1.资源定义,包括图片资源.各个窗口界面的xml定义文件 2.事件处理类代码,用于处理界面响应消息 3.其他业务逻辑代码 下面举例说明如何写一个简单的界面程序. 第一步:使用VC向导创建一个有两个tab页面的DuiVision工程 向导生成的解决方案文件如下: 默认有两个工程,分别是DuiVision库和应用程序工程.自动生成的代码目录中bin目录下的内容那个如下,bkimg目录存放窗口背景图片,skins目录存放图片资源,xm

DuiVision开发教程(4)-使用zip资源

从ZIP压缩文件中加载资源 DuiVision支持将所有的图片和XML资源文件放在一个zip格式的压缩文件中,如果使用zip格式的资源文件,需要在主程序代码中初始化部分指定使用的压缩文件的文件名. 如果使用zip资源文件,则resource.xml文件的位置默认是放在zip文件中的xml子目录下.建议zip文件按照xml.skins这样的子目录来压缩,见下面的压缩文件示例: 有zip资源文件的情况下,资源文件的加载并不一定是加载的zip文件中的内容,加载的优先级如下: 1)如果只有zip压缩文件

DuiVision开发教程(1)-创建DuiVision工程

DuiVision的源代码工程有两种类型:主程序和插件工程,可以通过人工方式创建DuiVision工程,也可以通过Visual Studio向导自动创建工程. 人工创建主程序的方法 1.创建一个基于DuiVision的界面程序是比较简单的,在VC中创建一个MFC对话框工程,注意工程要使用Unicode库: 工程创建之后,需要将默认对话框资源中的几个按钮和文字都删除,变成一个干净的对话框资源: 2.设置DuiVision的头文件和lib文件目录 将DuiVision的头文件和lib文件放在某个位置

DuiVision开发教程(5)-事件处理类编写

使用DuiVision开发的界面程序中,除了界面的描述之外,最主要的工作就是业务逻辑的处理,为了将业务逻辑和界面展示能够更好的分离,DuiVision中定义了事件处理基类,所有的业务逻辑都应该写在派生的事件处理类中,并把事件处理对象注册到相应的对话框或控件上,这样对应的子控件有事件需要处理的时候,就会自动调用注册的事件处理对象的相应函数.事件处理类只要在处理函数中根据控件的ID或名字决定该做什么事情,写相应的处理代码就可以.事件处理类中同时提供了一些函数方便根据ID或名字获取到对应的控件对象,并

DuiVision开发教程(19)-菜单

DuiVision菜单类是CDuiMenu,有两种显示的位置,一种是在窗口顶部某个按钮点击后可以下拉一个菜单,另一种是托盘图标的右键菜单. 窗口中的菜单定义方式是xml文件中设置某个按钮的action属性,以menu:开头,后面是菜单的XML文件名或XML定义名,例如下面这样定义: <imgbtn name="button.menu" pos="-110,0,-77,29" skin="IDB_BT_MENU" tip="菜单&q

DuiVision开发教程(14)-DUI控件基础类

DuiVision所有控件的基类是CControlBase类. CControlBase的属性如下表: 属性名 类型 说明 show 1|0 控件是否可见 disable 1|0 控件是否被禁用 pos 位置 控件的位置坐标,可以是左上角坐标,例如10,10,也可以是左上角+右下角坐标,例如10,10,200,100.支持正值和负值,正值表示从父控件左上角开始计算的值,负值表示从父控件右下角开始计算的值,例如-10,10表示从右边往左10像素,从上往下10像素的位置.也可以支持从父控件中间开始计

DuiVision开发教程(11)-托盘图标和托盘菜单

DuiVision界面库封装了Windows托盘图标的相关操作,可以创建托盘图标,并设置图标文件.托盘的tip信息,也可以处理托盘的单击.双击.右键菜单的事件. 通过调用下面的函数可以进行托盘的初始化: DuiSystem::Instance()->InitTray(); 初始化一般放在主的事件处理类OnInit函数中,可以参考demo程序的代码.设置托盘的图标文件盒tip信息可以调用DuiSystem的SetTrayIcon.SetTrayTip函数. 托盘的右键操作是打开右键菜单,右键菜单在

DuiVision开发教程(16)-区域控件

DuiVision的area控件(类名是CArea)可以设置区域的渐变透明度,不能响应鼠标事件,此控件的原理是画一个填充的透明度渐变矩形区域,透明度从矩形区域顶部究竟部均匀渐变. 控件的属性包含: 属性名 类型 说明 color 颜色 矩形区域的颜色 begin-transparent 字体 矩形区域顶部的起始透明度 end-transparent 字符串 矩形区域底部的终止透明度 DuiVision Demo程序的非常多界面都用到了area控件来实现渐变效果,比如,例如以下的登录对话框以下的渐

DuiVision开发教程(15)-DUI文字控件基础类

CControlBaseFont类是DuiVision中所有支持文字属性的控件的基类. 此控件的属性列表如下: 属性名 类型 说明 title 字符串 控件的显示标题 font 字体 控件的字体,可以引用资源定义中定义的某个字体,默认字体是default fontname 字符串 直接指定某种字体 fontwidth 数字 直接指定字体宽度 height 数字 控件高度 valign 枚举 文字的垂直对齐模式,top.middle.bottom align 枚举 文字的水平对齐模式,left.c