您当前的位置: 首页 >  ui

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

第二章 第二小节Duilib中的CLabelUI控件

插件开发 发布时间:2022-03-30 08:54:52 ,浏览量:1

文章目录
    • 1.CLabelUI控件
    • 2.作者答疑

1.CLabelUI控件

  CLabelUI控件是一个简单的文字图片展示控件,它继承至CControlUI控件和有一个非常好的新特点,就是它支持html代码的显示。   首先查看它支持的属性列表:


		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

  然后查看下源代码:

    class UILIB_API CLabelUI : public CControlUI
    {
        DECLARE_DUICONTROL(CLabelUI)
    public:
        CLabelUI();
        ~CLabelUI();
		//获取类名
        LPCTSTR GetClass() const;
        LPVOID GetInterface(LPCTSTR pstrName);
        UINT GetControlFlags() const;
		
		//文字属性设置
        void SetTextStyle(UINT uStyle);
        UINT GetTextStyle() const;
        void SetTextColor(DWORD dwTextColor);
        DWORD GetTextColor() const;
        void SetDisabledTextColor(DWORD dwTextColor);
        DWORD GetDisabledTextColor() const;
        void SetFont(int index);
        int GetFont() const;
        RECT GetTextPadding() const;
        void SetTextPadding(RECT rc);
        bool IsShowHtml();
        void SetShowHtml(bool bShowHtml = true);

        SIZE EstimateSize(SIZE szAvailable);
        void DoEvent(TEventUI& event);
        void SetAttribute(LPCTSTR pstrName, LPCTSTR pstrValue);
		
		//修改文本的绘制
        void PaintText(HDC hDC);
        
		//自动宽高的计算
        virtual bool GetAutoCalcWidth() const;
        virtual void SetAutoCalcWidth(bool bAutoCalcWidth);
        virtual bool GetAutoCalcHeight() const;
        virtual void SetAutoCalcHeight(bool bAutoCalcHeight);
        virtual void SetText(LPCTSTR pstrText);//修改绘制的文本

    protected:
        DWORD    m_dwTextColor;
        DWORD    m_dwDisabledTextColor;
        int      m_iFont;
        UINT     m_uTextStyle;
        RECT     m_rcTextPadding;
        bool     m_bShowHtml;
        bool     m_bAutoCalcWidth;
        bool     m_bAutoCalcHeight;

        SIZE     m_szAvailableLast;
        SIZE     m_cxyFixedLast;
        bool     m_bNeedEstimateSize;
    };

  其次再分析下PaintText函数,代码如下:

void CLabelUI::PaintText(HDC hDC)
    {
        if( m_dwTextColor == 0 ) m_dwTextColor = m_pManager->GetDefaultFontColor();
        if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor();

		//padding
        RECT rc = m_rcItem;
        RECT m_rcTextPadding = CLabelUI::m_rcTextPadding;
        GetManager()->GetDPIObj()->Scale(&m_rcTextPadding);
        rc.left += m_rcTextPadding.left;
        rc.right -= m_rcTextPadding.right;
        rc.top += m_rcTextPadding.top;
        rc.bottom -= m_rcTextPadding.bottom;

        CDuiString sText = GetText();
        if( sText.IsEmpty() ) return;
        int nLinks = 0;
        if( IsEnabled() ) {
            if( m_bShowHtml )//绘制html文本
                CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, sText, m_dwTextColor, \
                NULL, NULL, nLinks, m_iFont, m_uTextStyle);
            else
                CRenderEngine::DrawText(hDC, m_pManager, rc, sText, m_dwTextColor, \
                m_iFont, m_uTextStyle);
        }
        else {
            if( m_bShowHtml )
                CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, sText, m_dwDisabledTextColor, \
                NULL, NULL, nLinks, m_iFont, m_uTextStyle);
            else
                CRenderEngine::DrawText(hDC, m_pManager, rc, sText, m_dwDisabledTextColor, \
                m_iFont, m_uTextStyle);
        }
    }

  padding属性会主动缩小控件矩形的大小。

2.作者答疑

  如有疑问,请留言。

关注
打赏
1665481431
查看更多评论
立即登录/注册

微信扫码登录

0.0505s