SOUI的界面布局使用XML来布局,在XML配置的属性值会通过SObject::SetAttribute(name, value)的方式交给SObject处理。

SWindow是SOUI的界面元素对象,继承自SObject,同样也是通过SetAttribute获取XML中配置的属性。

虽然SObject提供了GetAttribute方法,实际上这个方法并不能直接获取使用SetAttribute设置的值。因为SetAttribute设置的值在对象处理属性的时候,消费完就丢掉了,并不会保存以供后面的GetAttribute使用。

那么什么时候GetAttribute会有效呢?

SOUI提供了一个IAttrStorageFactory接口:

SNSBEGIN

typedef struct IWindow IWindow;

#undef INTERFACE
#define INTERFACE IAttrStorage
DECLARE_INTERFACE_(IAttrStorage, IObjRef)
{
//!添加引用
/*!
*/
STDMETHOD_(long, AddRef)(THIS) PURE; //!释放引用
/*!
*/
STDMETHOD_(long, Release)(THIS) PURE; //!释放对象
/*!
*/
STDMETHOD_(void, OnFinalRelease)(THIS) PURE; STDMETHOD_(void, OnSetAttribute)
(THIS_ const IStringW *strName, const IStringW *strValue, BOOL bHandled) PURE;
STDMETHOD_(BOOL, OnGetAttribute)(CTHIS_ const IStringW *strName, IStringW *strValue) SCONST PURE;
}; #undef INTERFACE
#define INTERFACE IAttrStorageFactory
DECLARE_INTERFACE_(IAttrStorageFactory, IObjRef)
{
//!添加引用
/*!
*/
STDMETHOD_(long, AddRef)(THIS) PURE; //!释放引用
/*!
*/
STDMETHOD_(long, Release)(THIS) PURE; //!释放对象
/*!
*/
STDMETHOD_(void, OnFinalRelease)(THIS) PURE; STDMETHOD_(HRESULT, CreateAttrStorage)
(CTHIS_ IWindow * owner, IAttrStorage * *ppAttrStorage) SCONST PURE;
}; SNSEND

在IAttrStorageFactory中需要实现CreateAttrStorage方法来创建IAttrStorage 接口。

IAttrStorage 主要有两个方法,OnSetAttribute,OnGetAttribute,在OnSetAttribute中,你可以决定一个属性要不要保存起来。

同样在OnGetAttribute就可以获取到前面保存的属性值。

在SOUI中使用GetAttribute获取XML中配置的属性的更多相关文章

  1. 使用dom4j工具:获取xml中的标签属性(三)

    package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...

  2. DOM【介绍、HTML中的DOM、XML中的DOM】

    什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...

  3. Yii中使用PHPexcel获取excel中数据

    1.view中代码如下: <form name="frmBatchSettle" id="" action="" method=&qu ...

  4. 5、xamarin.android 中如何对AndroidManifest.xml 进行配置和调整

    降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 我们在翻看一些java的源码经常会说我们要在AndroidManifest.xml 中添加一些东西.而我们使用xamari ...

  5. 使用getElementById获取xml中的指定元素

    Document有一个getElementById的方法,在文档中的解释是:     返回具有带给定值的 ID 属性的 Element.如果不存在此类元素,则此方法返回 null.如果多个元素具有带该 ...

  6. [Java] 通过XPath获取XML中某个节点的属性

    /** * Get PA Url * @author jzhang6 * @return url */ public String getPAUrl(){ String PAUrl = "& ...

  7. web中纯java获取配置文件中的数据

    /*********获取配置文件,但配置文件中的值改变,不会随着值的改变也获取的参数值改变**********/  /**   * 原因是因为,类装载,装载完后,不会再去装载了   * *///  I ...

  8. [转]java中通过request获取路径中的不同信息

    原文地址:http://blog.csdn.net/lv_shijun/article/details/40819859 aa为工程中的项目名 bb为webRoot下的文件夹 1.request.ge ...

  9. ibatis中的cdata和xml中cdata的含义

    ibatis的cdata用于sqlmap文件中,二sqlmap本身就是xml文件,即解析cdata的方法与xml文件的cdata相同. 简单来说:cdata就是用来表明纯文本的,如果没有这个的话 &l ...

  10. vuex中怎么直接获取state中的值,以及computed的使用注意

    1,直接用$store对象获取store对象,再进一步获取state属性..... 2, 3,computed computed是计算属性,他不可以直把值直接存入data中,因此不能像data一样直接 ...

随机推荐

  1. MySQL8.0新特性之增强版逻辑备份恢复

    前言关于MySQL库表逻辑备份恢复,我们主要有以下几种常用的工具: 1.mysqldump:MySQL原生自带的逻辑备份恢复工具,支持整个实例.单个数据库.单张表等的备份与恢复,对于1-10个G的数据 ...

  2. elasticsearch之python操作

    总结使用python对于elasticsearch的常用操作 安装 pip install elasticsearch 2. 连接 from elasticsearch import Elastics ...

  3. JPEG格式研究——(3)霍夫曼解码

    因为霍夫曼编码以bit为单位,长度又不确定,读取时无法区分,JPEG采用了范式霍夫曼编码. 读取并生成霍夫曼表 JPEG中DC系数和AC系数是分别进行编码将霍夫曼表保存在DQT中. 直接上代码解释可能 ...

  4. 如何正确使用 RMQ

    序列分块.设块长为 \(B\).每块预处理出最大值.对于询问 \([l, r]\),答案就是整块最大值和散块最大值拼起来.答案显然是 \(O(n) \sim O(\dfrac{n}{B} + B)\) ...

  5. HTML5 新的语义标签

    1.常用的语义标签 意义:语义标签便于阅读代码,也便于搜索引擎解析文档结构与内容 标签 含义 article 定义页面独立的内容区域 aside 定义侧边栏内容 header 定义了文档的头部区域 s ...

  6. 规范LR(1)语法分析表

    前面已经实现了SLR语法分析表,但是可能会出现即使语法不是二义性文法,也存在移入/规约冲突 状态 i 包含项[A ->α ],当状态 i 出现在栈顶时,栈中的可行前缀时βα且在任何最后句型中a都 ...

  7. 修改QScrollArea背景色透明,且不影响子控件,在Edit Style Sheet中修改

    在QScrollArea或者父控件中设置: QScrollArea{ background-color:transparent; } 在scrollAreaWidgetContents控件或者父控件中 ...

  8. openEuler欧拉系统重置root密码

    步骤: 系统启动时,出现如下页面,按e进入内核编辑模式 进入如下页面 按下光标后,找到linux开头这一行,修改ro为rw,并在行尾添加init=/bin/sh,修改后效果如下,在crtl+x保存后开 ...

  9. 那些年,我们一起追的 WLB

    2019年,那一年,我29岁. 那一年,"996是福报"的言论在网络上引发舆论轩然大波. 那一年,"大小周"."996"."007 ...

  10. 我们需要什么样的 ORM 框架

    了解我的人都知道, 本人一直非常排斥 ORM 框架, 由于对象关系阻抗不匹配, 一直觉得它没有什么用, 操作数据库最好的手段是 sql+动态语言. 但这两年想法有了重大改变. 2013 年用 js 实 ...