duilib之重写BUTTON按钮
在使用BUTTON过程中,有时候发现一些属性不够用,或要从新绘制BUTTON按钮,那该如何操作?其实很简单,只需要继承CButtonUI类就行。
创建类CMyButtonUI,继承CButtonUI,然后添加如下函数:
LPCTSTR GetClass() const; LPVOID GetInterface(LPCTSTR pstrName); virtual void SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue ); int GetMyAttr(); void SetMyAttr(int nData);
其中,重写SetAttribute函数,是为了添加新属性的操作,所有函数代码如下:
CMyButtonUI::CMyButtonUI(void) { } CMyButtonUI::~CMyButtonUI(void) { } LPCTSTR CMyButtonUI::GetClass() const { return _T("IRButtonUI"); } LPVOID CMyButtonUI::GetInterface( LPCTSTR pstrName ) { if( _tcscmp(pstrName, _T("MyButton")) == 0 ) return static_cast<CMyButtonUI*>(this); return CButtonUI::GetInterface(pstrName); } void CMyButtonUI::SetAttribute( LPCTSTR pstrName, LPCTSTR pstrValue ) { //throw std::exception("The method or operation is not implemented."); if( _tcscmp(pstrName, _T("my_attr")) == 0 ) { LPTSTR pstr = NULL; m_nMyAttr = _tcstol(pstrValue, &pstr, 10); } CButtonUI::SetAttribute(pstrName, pstrValue); } int CMyButtonUI::GetMyAttr() { return m_nMyAttr ; } void CMyButtonUI::SetMyAttr(int nData) { m_nMyAttr = nData; }
其中my_attr为自己添加的属性,添加CButtonUI::SetAttribute(pstrName, pstrValue);是为了继承原有的属性。
用法很简单,在XML中,写入如下:
< MyBurtton my_attr="100" bkcolor="#FF874523" height="30" width="30" />
在创建此控件的类函数中的CreateControl( LPCTSTR pstrClass )函数中写下如下代码:
if(0 == _tcsicmp(pstrClass,_T("MyBurtton"))) return newCMyButtonUI();
return NULL;
完成以上步骤,既可以处理自己创建的BUTTON。