文章目录
1.CTextUI控件
- 1.CTextUI控件
- 2.作者答疑
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.作者答疑如有疑问,请留言。