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