从Bkwin到DUIEngine快速入门

从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

定义字符串

<s id="10">您好</s>

app_skin.xml

定义皮肤

<png name="SysBtnClose" src="22001" subwidth="39"/>

app_style.xml

定义风格

<class name="TitleText" font="0004"  crtext="FFFFFF"/>

App_main.xml

布局定义

定义窗口的而已

 

 

index.xml和residbuilder工具

工欲善其事,必先利其器。在DUIEngine里,引入了一个index.xml和residbuilder工具。Index.xml其实和原来bkwinres.rc2的作用是一样的,就是来定义资源。

<resid type="XML"id_name="IDR_DUI_SKIN_DEF" id="100" file="layout\def_skin.xml"/>

<resid type="XML"id_name="IDR_DUI_STYLE_DEF" id="101" file="layout\def_style.xml" />

<resid type="XML"id_name="IDR_DUI_STRING_DEF" id="102" file="layout\def_string.xml" />

这个只是指定了资源类型、资源名称、资源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文件

 

窗口布局定义

和bkwin相比,DUIEngine抛弃了原来的Head、Body、Foot的三部分做法,只剩一个Body了。

<layertitle="DUI-DEMO"width="600" height="400" appwin="1" ncRect="5,5,5,5"  resize="1" translucent="0"  nomaxsize="0">

    <body>

    <dlg name="maindlg"pos="0,0,-0,-0" class="cls_dlg_frame">

      <caption pos="0,0,-0,29">

        <text pos="11,9"class="cls_txt_red">DUI-Demo ver:%str1%</text>

        <imgbtn id="1"name="close" skin="btn_sys_close" pos="-45,0"tip="close" animate="0"/>

      </caption>

    </dlg>

    </body>

</layer>

红色的部分就是原来新增的或变化比较大的。在DuiEngine里,定义skin的时候可以指定属主,如:

<imgframename="dlg_frame" owner="DUI-DEMO"   src="1" …>

<layertitle="DUI-DEMO"…> 因是指定一个属主,每次在打一个窗口的时候,都会加载这个窗口的私有资源,比如一般很少用的对话框,以减少资源的使用。

…ncRect="5,5,5,5"… 就是指定窗口的非客户区, 比如 Resize的时候,到这个非客户区就会出现光标指针改变。

…translucent… 指定窗口半透明。

<caption …>  新增,标题栏。在标题栏双击可最大化、还原窗口,还可以拖动窗口。

常用控件的属性定义

def_objattr.xml。 针对经常使用控件的不变属性,在此处定义,以免每次都要写。

<button class="normalbtn"/>

<check skin="btncheckbox"/>

<radio skin="btnRadio"/>

资源的几种加载方式

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快速入门[ 网友'一言'友情提供]

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值