LAPTOP-T815PCOQ\25526
2025-01-11 52e82dcdc401782b58ed50bc14ae270b143370a9
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#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);               // 设置超链接光标
    CBLLabel& DisableBorder();                                // 禁用边框
    CBLLabel& SetBorderColor(COLORREF crBorder);            // 设置边框颜色
    CBLLabel& SetBorderWidth(int nWidth);                   // 设置边框宽度
    CBLLabel& SetBorderStyle(int nStyle);                   // 设置边框样式
    CBLLabel& SetDefaultCursor(HCURSOR hCursor);            // 设置默认光标
    CBLLabel& SetHandCursor(HCURSOR hCursor);                // 设置手型光标
    CBLLabel& SetRoundedCorners(BOOL bEnable, int nRadius); // 设置圆角及半径
    CBLLabel& SetCornerRadius(int nTopLeft, int nTopRight, int nBottomRight, int nBottomLeft); // 设置各角圆角半径
 
protected:
    // 工具函数
    void ReconstructFont();                                 // 重新构造字体
    void UpdateFontSize();                                  // 动态调整字体大小
    void CreateRoundedRegion(CRgn& rgn, const CRect& rect); // 创建圆角区域
    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;          // 超链接光标
 
    // 边框属性
    COLORREF m_crBorderColor;     // 边框颜色
    int m_nBorderWidth;           // 边框宽度
    int m_nBorderStyle;           // 边框样式(使用 GDI 样式:PS_SOLID, PS_DASH 等)
 
    // 圆角相关属性
    BOOL m_bRoundedCorners;       // 是否启用圆角
    int  m_nTopLeftRadius;        // 左上角圆角半径
    int  m_nTopRightRadius;       // 右上角圆角半径
    int  m_nBottomRightRadius;    // 右下角圆角半径
    int  m_nBottomLeftRadius;     // 左下角圆角半径
 
    // 鼠标事件相关属性
    BOOL    m_bMouseIn;           // 鼠标是否在控件上
    HCURSOR m_hHandCursor;        // 手型光标
    HCURSOR m_hDefaultCursor;     // 默认光标
    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 void OnMouseMove(UINT nFlags, CPoint point);    // 鼠标移动事件
    afx_msg void OnMouseLeave();                            // 鼠标离开事件
    afx_msg BOOL OnSetCursor(CWnd* pWnd, UINT nHitTest, UINT message); // 设置光标事件
    DECLARE_MESSAGE_MAP()
};
 
#endif // !defined(AFX_BLLABEL_H__A4EABEC5_2E8C_11D1_B79F_00805F9ECE10__INCLUDED_)