基于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坐标都应该使用负数来定义。
以上菜单定义文件的实际显示效果如下:
原文地址:http://blog.csdn.net/oceanheart/article/details/45776443