在SOUI中使用GetAttribute获取XML中配置的属性
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中配置的属性的更多相关文章
- 使用dom4j工具:获取xml中的标签属性(三)
package dom4j_read; import java.io.File; import java.util.List; import org.dom4j.Attribute; import o ...
- DOM【介绍、HTML中的DOM、XML中的DOM】
什么是DOM? DOM(Document Object Model)文档对象模型,是语言和平台的中立接口. 允许程序和脚本动态地访问和更新文档的内容. 为什么要使用DOM? Dom技术使得用户页面可以 ...
- Yii中使用PHPexcel获取excel中数据
1.view中代码如下: <form name="frmBatchSettle" id="" action="" method=&qu ...
- 5、xamarin.android 中如何对AndroidManifest.xml 进行配置和调整
降低学习成本是每个.NET传教士义务与责任. 建立生态,保护生态,见者有份. 我们在翻看一些java的源码经常会说我们要在AndroidManifest.xml 中添加一些东西.而我们使用xamari ...
- 使用getElementById获取xml中的指定元素
Document有一个getElementById的方法,在文档中的解释是: 返回具有带给定值的 ID 属性的 Element.如果不存在此类元素,则此方法返回 null.如果多个元素具有带该 ...
- [Java] 通过XPath获取XML中某个节点的属性
/** * Get PA Url * @author jzhang6 * @return url */ public String getPAUrl(){ String PAUrl = "& ...
- web中纯java获取配置文件中的数据
/*********获取配置文件,但配置文件中的值改变,不会随着值的改变也获取的参数值改变**********/ /** * 原因是因为,类装载,装载完后,不会再去装载了 * */// I ...
- [转]java中通过request获取路径中的不同信息
原文地址:http://blog.csdn.net/lv_shijun/article/details/40819859 aa为工程中的项目名 bb为webRoot下的文件夹 1.request.ge ...
- ibatis中的cdata和xml中cdata的含义
ibatis的cdata用于sqlmap文件中,二sqlmap本身就是xml文件,即解析cdata的方法与xml文件的cdata相同. 简单来说:cdata就是用来表明纯文本的,如果没有这个的话 &l ...
- vuex中怎么直接获取state中的值,以及computed的使用注意
1,直接用$store对象获取store对象,再进一步获取state属性..... 2, 3,computed computed是计算属性,他不可以直把值直接存入data中,因此不能像data一样直接 ...
随机推荐
- php的各种序列化对比
php的各个序列化反序列化对比如下 function 10万条记录的序列化并写入(ms) 10万条记录文件读取并反序列化(ms) 100条记录序列化并写入(ms) 100条记录文件读取并反序列化(ms ...
- 不依赖 Spring,你会如何自实现 RabbitMQ 消息的消费(一)
开心一刻 上午一好哥们微信我哥们:哥们在干嘛,晚上出来吃饭我:就我俩吗哥们:对啊我:那多没意思,我叫俩女的出来哥们:好啊,哈哈哈晚上吃完饭到家后,我给哥们发消息我:今天吃的真开心,下次继续哥们:开心尼 ...
- MySQL原理简介—5.存储模型和数据读写机制
大纲 1.为什么不能直接更新磁盘上的数据 2.为什么要引入数据页的概念 3.一行数据在磁盘上是如何存储的 4.一行数据中的NULL值是如何处理的 5.一行数据的数据头存储的是什么 6.一行数据的真实数 ...
- Pyecharts——Python高级可视化
Pyecharts是百度开源的移植到Python上的可视化工具,里面方法调用起来像是标记性语言,因此代码的可读性很强,一目了然.下面是一个绘制散点图的例子: #%% import pyecharts. ...
- Ansible常用功能说明 [异步、并发、委托等]
文章目录 Ansible的同步模式与异步模式 Ansible的异步和轮询 [async.poll] Ansible的并发限制 [serial.max_fail_percentage] Ansible的 ...
- Docker Registry之删除镜像、垃圾回收
Docker仓库在2.1版本中支持了删除镜像的API,但这个删除操作只会删除镜像元数据,不会删除层数据.在2.4版本中对这一问题进行了解决,增加了一个垃圾回收命令,删除未被引用的层数据.本文对这一特性 ...
- Java Study For Seven Day( 面向对象三)
继承 class Person { String name; int age; } class Student extends Person { void study() { System.out.p ...
- python模块之sqlite3
在Python中操作sqlite3 1)基本使用 import sqlite3 conn = sqlite3.connect('example.db') cursor = conn.cursor() ...
- 中电金信鲸视:以AI视觉技术为复杂行业场景装上“火眼金睛”
作为人工智能和计算机视觉的交叉领域,智能视觉通过仿生人类视觉机能,对不同形式的视觉输入进行处理.理解和决策.现今,智能视觉已成为应用广泛.市场覆盖大.形式多样的产业方向,得到了国家政策的大力支持. ...
- shell 下 exec,source,.,bash和sh以及export得区别
exec执行命令时,不会启用新的shell进程. source和 .也不会启用新的shell进程,在当前shell中执行,设定的局部变量在执行完命令后仍然有效. bash或sh执行时,会另起一个子 ...