首页 > 其他分享 >在SOUI中使用GetAttribute获取XML中配置的属性

在SOUI中使用GetAttribute获取XML中配置的属性

时间:2023-01-18 15:57:05浏览次数:42  
标签:XML IAttrStorage SOUI STDMETHOD GetAttribute PURE INTERFACE

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就可以获取到前面保存的属性值。

 

标签:XML,IAttrStorage,SOUI,STDMETHOD,GetAttribute,PURE,INTERFACE
From: https://www.cnblogs.com/setoutsoft/p/17060021.html

相关文章