在使用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。
