金山界面库分析_解析bkwin

金山界面库分析_解析bkwin

ID:30805822

大小:200.67 KB

页数:23页

时间:2019-01-03

金山界面库分析_解析bkwin_第1页
金山界面库分析_解析bkwin_第2页
金山界面库分析_解析bkwin_第3页
金山界面库分析_解析bkwin_第4页
金山界面库分析_解析bkwin_第5页
资源描述:

《金山界面库分析_解析bkwin》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、通过XML创建界面---对象的动态创建以及属性的设置为了界面可配置化和换肤,需要界面元素可以根据XML动态创建和设置属性。在BKLib中,CBkObject类就完成了这样的功能,主要负责类的创建和属性的设置。因为对象都是从XML动态创建的,动态的创建是一个类最基本的属性,所以其他类都从CBkObject派生。来看看这个类的四个方法:BOOLIsClass(LPCSTRlpszName):判断是不是这个类的对象。纯虚方法,也就是从CBkObject继承来的类都要实现这个方法才行,同时,这个方法在不同的类上面会有不同的表现。所以上层定义

2、接口,下层提供实现。这个方法可以在运行时检测类实例的实际类型。LPCSTRGetObjectClass():同上一个方法,用于获取类的名字。BOOLLoad(TiXmlElement*pXmlElem):从XML中获取属性并将属性设置到对象中,在基类中仅仅是将一个XML元素的属性设置到对象中。当然,如果子类对象有更复杂的实现,比如一个对象对应的XML元素还有子节点,就需要Load其子节点,这些都可以在子类中通过覆盖父类方法来实现。HRESULTSetAttribute(CStringAstrAttribName,CStringAst

3、rValue,BOOLbLoading):设置属性的方法,CBkObject是纯虚类,在XML中不会有对应的节点,自然也没有相应的属性,所以其实现仅仅放回了一个E_FAIL,没有其他操作。接着我们就看到了在bkobject.h里面一大堆的宏定义:宏定义一般是为了简洁,而这些宏的用途多为子类使用。BKOBJ_DECLARE_CLASS_NAME:获取类名,判断是否是某个类的对象,还有CheckAndNew,用于动态创建以下的宏定义主要用于属性的设置和映射(XML节点属性和对象属性的对应)BKWIN_DECLARE_ATTRIBUTES

4、_BEGINBKWIN_DECLARE_ATTRIBUTES_ENDBKWIN_CHAIN_ATTRIBUTEBKWIN_CUSTOM_ATTRIBUTEBKWIN_INT_ATTRIBUTEBKWIN_UINT_ATTRIBUTEBKWIN_DWORD_ATTRIBUTEBKWIN_STRING_ATTRIBUTEBKWIN_TSTRING_ATTRIBUTEBKWIN_HEX_ATTRIBUTEBKWIN_COLOR_ATTRIBUTEBKWIN_FONT_ATTRIBUTEBKWIN_ENUM_ATTRIBUTEBKWIN_E

5、NUM_VALUEBKWIN_ENUM_ENDBKWIN_STYLE_ATTRIBUTEBKWIN_SKIN_ATTRIBUTE现在我们看一个例子,继承自CBkObject的控件对象CBkProgress是如何完成从XML动态创建的。首先,在类的定义中包含宏BKOBJ_DECLARE_CLASS_NAME(CBkProgress,"progress"),将宏展开如下:public:staticCBkProgress*CheckAndNew(LPCSTRlpszName){if(strcmp(GetClassName(),lpszNa

6、me)==0)returnnewCBkProgress;elsereturnNULL;}//通过传入名称创建对应的类,在解析XML中按照节点名字创建对应类的实例staticLPCSTRGetClassName(){return“progress”;}virtualLPCSTRGetObjectClass(){return“progress”;}//覆盖父类方法,返回类实例对应的XML节点名字virtualBOOLIsClass(LPCSTRlpszName){returnstrcmp(GetClassName(),lpszName)

7、==0;}//覆盖父类方法,根据XML节点名字检查类实例是否是此节点另外,包含设置节点属性的宏,如下BKWIN_DECLARE_ATTRIBUTES_BEGIN()BKWIN_SKIN_ATTRIBUTE("bgskin",m_pSkinBg,TRUE)BKWIN_DWORD_ATTRIBUTE("min",m_dwMinValue,FALSE)BKWIN_UINT_ATTRIBUTE("showpercent",m_bShowPercent,FALSE)BKWIN_DECLARE_ATTRIBUTES_END()将宏展开如下:pu

8、blic:virtualHRESULTSetAttribute(CStringAstrAttribName,CStringAstrValue,BOOLbLoading)//添加SetAttribute方法,在Load中循环调用设置属性

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。