您当前的位置: 首页 >  ui

插件开发

暂无认证

  • 1浏览

    0关注

    492博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

第二章 第五小节Duilib中的CTextUI控件-链接

插件开发 发布时间:2022-03-31 08:47:15 ,浏览量:1

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

1.CTextUI控件

  CTextUI控件是一个链接文本控件,显示指定的文本,点击执行链接操作,xml创建操作如下:

//使用范例

//属性列表

		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
		
	

  而CTextUI控件类,它继承至CLabelUI,源代码如下:

class UILIB_API CTextUI : public CLabelUI
    {
        DECLARE_DUICONTROL(CTextUI)
    public:
        CTextUI();
        ~CTextUI();

        LPCTSTR GetClass() const;
        UINT GetControlFlags() const;
        LPVOID GetInterface(LPCTSTR pstrName);

        CDuiString* GetLinkContent(int iIndex);

        void DoEvent(TEventUI& event);
        SIZE EstimateSize(SIZE szAvailable);

        void PaintText(HDC hDC);

    protected:
        enum { MAX_LINK = 8 };
        int m_nLinks;
        RECT m_rcLinks[MAX_LINK];
        CDuiString m_sLinks[MAX_LINK];
        int m_nHoverLink;
    };

  支持8个链接,在窗口Notify函数中,处理对应的事件,源码如下:

if (msg.sType == _T("link"))
{
	CTextUI* pText = (CTextUI*)msg.pSender;
	CDuiString* str = pText->GetLinkContent(0);

	//打开浏览器
	ShellExecute(NULL, "open", str->GetData(), NULL, NULL, SW_SHOWNORMAL);
}

  感兴趣的读者,可以阅读下DoEvent函数和PaintText函数,源代码如下所示:

void CTextUI::DoEvent(TEventUI& event)
    {
        if( !IsMouseEnabled() && event.Type > UIEVENT__MOUSEBEGIN && event.Type DoEvent(event);
            else CLabelUI::DoEvent(event);
            return;
        }

        if( event.Type == UIEVENT_SETCURSOR ) {
            for( int i = 0; i GetDefaultFontColor();
        if( m_dwDisabledTextColor == 0 ) m_dwDisabledTextColor = m_pManager->GetDefaultDisabledColor();

        m_nLinks = lengthof(m_rcLinks);
        RECT rc = m_rcItem;
        rc.left += m_rcTextPadding.left;
        rc.right -= m_rcTextPadding.right;
        rc.top += m_rcTextPadding.top;
        rc.bottom -= m_rcTextPadding.bottom;
        if( IsEnabled() ) {
            if( m_bShowHtml )
                CRenderEngine::DrawHtmlText(hDC, m_pManager, rc, sText, m_dwTextColor, \
                m_rcLinks, m_sLinks, m_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, \
                m_rcLinks, m_sLinks, m_nLinks, m_iFont, m_uTextStyle);
            else
                CRenderEngine::DrawText(hDC, m_pManager, rc, sText, m_dwDisabledTextColor, \
                m_iFont, m_uTextStyle);
        }
    }

  一个是鼠标事件,另外是一个响应绘制。

2.作者答疑

  如有疑问,请留言。

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

微信扫码登录

0.0398s