从Bkwin到DUIEngine快速入门
DuiEngine是一个基于金山Bkwin修改完善形成的一个新界面库,该库吸取了Bkwin的精华,经过全面重构对原有不合理或缺失的地方进行修正。本文主要是指导原使用bkwin 的人员快速入门。
一、资源处理方式上的区别
入门的第一步就是了解DUIEngine的资源处理方式,搞清楚这个后面的相对就比较easy了。原来熟悉bkwin的同学,都知道bkwin的资源是这么干的:
文件 |
说明 |
例子 |
bkwinres.h |
控件ID的宏定义 |
#define IDC_BTN_ CLOSE 110001 |
bkwinres.rc2 |
资源定义 |
定义XML,PNG,BMP等资源 DEFINE_XML(IDR_SKIN_DEF,"res\\app_skin.xml") |
app_string.xml |
定义字符串 |
|
app_skin.xml |
定义皮肤 |
|
app_style.xml |
定义风格 |
|
App_main.xml |
布局定义 |
定义窗口的而已
|
n index.xml和residbuilder工具
工欲善其事,必先利其器。在DUIEngine里,引入了一个index.xml和residbuilder工具。Index.xml其实和原来bkwinres.rc2的作用是一样的,就是来定义资源。
这个只是指定了资源类型、资源名称、资源ID。需要经过residbuilder工具来生成以下文件:
Duires\winres.rc2: 是根据index.xml动态生成的,就是以前的bkwinres.rc2。
Winres.h: 自动根据布局文件(如dlg_mail.xml)生成的控件的宏定义。在布局文件里,每个控件多了个name,residbuilder就是根据name和id生成出来宏定义。另外,还可以自动为编出id。
name2id.xml:这个自动生成出来的NAME和ID的映射关系,主要是程序内部使用。
Residbuider的使用说明:
residbuilder -y -i .\skin\index.xml-r .\duires\winres.rc2 -n .\duires\name2id.xml -h .\duires\winres.h
-y: 强制改写(只读文件)
-i: 资源定义文件 *所有用到的资源需要在此处定义
-r: 生成的资源rc2文件 *将资源加入PE文件
-h: 生成的头文件 *生成资源名称和ID的宏定义
-n: 生成的名称ID映射文件 *生成名称和ID的对应关系
-p: 皮肤路径 *相对于程序的.rc文件
n 窗口布局定义
和bkwin相比,DUIEngine抛弃了原来的Head、Body、Foot的三部分做法,只剩一个Body了。
红色的部分就是原来新增的或变化比较大的。在DuiEngine里,定义skin的时候可以指定属主,如:
…ncRect="5,5,5,5"… 就是指定窗口的非客户区, 比如 Resize的时候,到这个非客户区就会出现光标指针改变。
…translucent… 指定窗口半透明。
n 常用控件的属性定义
def_objattr.xml。 针对经常使用控件的不变属性,在此处定义,以免每次都要写。
n 资源的几种加载方式
l 从ZIP文件加载皮肤
DuiResProviderZip *zipSkin=new DuiResProviderZip;
CStringstrZip=CA2T(szCurrentDir)+_T("\\def_skin.zip");
if(!zipSkin->Init(strZip))
{
DUIASSERT(0);
return 1;
}
duiSystem.SetResProvider(zipSkin);
l 从文件加载皮肤
lstrcatA(szCurrentDir, "\\..\\dui_demo" );
DuiResProviderFiles*pResFiles=new DuiResProviderFiles;
if(!pResFiles->Init(szCurrentDir))
{
DUIASSERT(0);
return 1;
}
duiSystem.SetResProvider(pResFiles);
l 从资源加载皮肤
duiSystem.SetResProvider(newDuiResProviderPE(hInstance));
注意:对于第三种,需要将winres.rc2加入到资源里。
二、类图
从Bkwin到DUIEngine快速入门[ 网友'一言'友情提供]