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。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM