LAPTOP-SNT8I5JK\Boounion
2024-12-09 3bf6df412c3b681e8901d6dcddd803a9c3235484
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#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 <functional> 
 
/////////////////////////////////////////////////////////////////////////////
// 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<void()> 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<void()> 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_)