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。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步