#if !defined(AFX_BLLABEL_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_) #define AFX_BLLABEL_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_ #if _MSC_VER >= 1000 #pragma once #endif // _MSC_VER >= 1000 #include ///////////////////////////////////////////////////////////////////////////// // CBLLabel window enum FlashType { None, Text, Background }; enum TextAlign { AlignLeft, AlignCenter, AlignRight }; class AFX_EXT_CLASS CBLLabel : public CStatic { DECLARE_DYNCREATE(CBLLabel) // 支持动态创建 public: // 构造与析构 CBLLabel(); virtual ~CBLLabel(); void SetClickCallback(std::function callback); // 设置点击事件的回调函数 // 属性设置接口 CBLLabel& SetBkColor(COLORREF crBkgnd); // 设置背景颜色 CBLLabel& SetTextColor(COLORREF crText); // 设置文本颜色 CBLLabel& SetText(const CString& strText); // 设置文本内容 CBLLabel& SetFontBold(BOOL bBold); // 设置字体加粗 CBLLabel& SetFontName(const CString& strFont); // 设置字体名称 CBLLabel& SetFontUnderline(BOOL bSet); // 设置下划线 CBLLabel& SetFontItalic(BOOL bSet); // 设置斜体 CBLLabel& SetFontSize(int nSize); // 设置字体大小 CBLLabel& SetAlignment(TextAlign alignment); // 设置文本对齐方式 CBLLabel& SetDynamicFont(BOOL bDynamic); // 设置是否动态调整字体 CBLLabel& FlashText(BOOL bActivate); // 闪烁文本 CBLLabel& FlashBackground(BOOL bActivate); // 闪烁背景 CBLLabel& SetLink(BOOL bLink); // 设置是否启用超链接 CBLLabel& SetLinkCursor(HCURSOR hCursor); // 设置超链接光标 protected: // 工具函数 void ReconstructFont(); // 重新构造字体 void UpdateFontSize(); // 动态调整字体大小 virtual void OnPaint(); // 自定义绘制文本 // 属性 COLORREF m_crText; // 文本颜色 COLORREF m_crBkColor; // 背景颜色 HBRUSH m_hBrush; // 背景画刷 LOGFONT m_lf; // 字体信息 CFont m_font; // 字体对象 CString m_strText; // 文本内容 BOOL m_bState; // 状态,用于闪烁 BOOL m_bTimer; // 定时器状态 BOOL m_bLink; // 是否为超链接 BOOL m_bDynamicFont; // 是否动态调整字体大小 TextAlign m_alignment; // 文本对齐方式 FlashType m_Type; // 闪烁类型 HCURSOR m_hCursor; // 超链接光标 std::function m_clickCallback; // 点击事件的回调函数 protected: // MFC 消息映射 virtual HBRUSH CtlColor(CDC* pDC, UINT nCtlColor); // 背景和文本颜色设置 afx_msg void OnTimer(UINT_PTR nIDEvent); // 定时器事件 afx_msg void OnLButtonDown(UINT nFlags, CPoint point); // 鼠标点击事件 afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); // 设置光标事件 DECLARE_MESSAGE_MAP() }; #endif // !defined(AFX_BLLABEL_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_)