• 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。

  • 相关阅读:
    今天辞职了
    数据库导出Excel
    2009.5重庆之行(二),5.23
    SQL远程连接操作
    上周入手WD500GB笔记本硬盘,上图
    [测试]Gridview绑定SqlDataReader+IList<T>和SqlDataAdapter+DataSet的效率
    SQL处理表重复记录(查询和删除)
    数据库导出excel (二)
    写了一个简单的手机号码正则
    SET XACT_ABORT 与 SET NOCOUNT的语法
  • 原文地址:https://www.cnblogs.com/happinessday/p/6429248.html
Copyright © 2020-2023  润新知