반응형
250x250
Notice
Recent Posts
Recent Comments
Link
«   2026/01   »
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
Archives
Today
Total
관리 메뉴

폴크(FOLC)

MFC - CLabel 간소화 구현 본문

카테고리 없음

MFC - CLabel 간소화 구현

folcjin 2025. 4. 17. 20:42
728x90
반응형

CStatic을 상속받아 사용자 정의 클래스를 제작해 놓은 CLabel 클래스의 예시입니다.​
- 텍스트 색상 변경과 마우스 이벤트 처리 가능

// CLabel.h
#pragma once
#include <afxwin.h>

class CLabel : public CStatic
{
public:
    CLabel();
    virtual ~CLabel();

    void SetTextColor(COLORREF color);
    void SetBkColor(COLORREF color);

protected:
    afx_msg HBRUSH CtlColor(CDC* pDC, UINT nCtlColor);
    afx_msg void OnMouseMove(UINT nFlags, CPoint point);
    afx_msg LRESULT OnMouseHover(WPARAM wParam, LPARAM lParam);
    afx_msg LRESULT OnMouseLeave(WPARAM wParam, LPARAM lParam);

    DECLARE_MESSAGE_MAP()

private:
    COLORREF m_textColor;
    COLORREF m_bkColor;
    bool m_bMouseTracking;
};

 

 

// CLabel.cpp
#include "CLabel.h"

CLabel::CLabel()
    : m_textColor(RGB(0, 0, 0)), m_bkColor(RGB(255, 255, 255)), m_bMouseTracking(false)
{
}

CLabel::~CLabel()
{
}

void CLabel::SetTextColor(COLORREF color)
{
    m_textColor = color;
    Invalidate();
}

void CLabel::SetBkColor(COLORREF color)
{
    m_bkColor = color;
    Invalidate();
}

BEGIN_MESSAGE_MAP(CLabel, CStatic)
    ON_WM_CTLCOLOR_REFLECT()
    ON_WM_MOUSEMOVE()
    ON_MESSAGE(WM_MOUSEHOVER, &CLabel::OnMouseHover)
    ON_MESSAGE(WM_MOUSELEAVE, &CLabel::OnMouseLeave)
END_MESSAGE_MAP()

HBRUSH CLabel::CtlColor(CDC* pDC, UINT /*nCtlColor*/)
{
    pDC->SetTextColor(m_textColor);
    pDC->SetBkColor(m_bkColor);
    static CBrush brush;
    brush.DeleteObject();
    brush.CreateSolidBrush(m_bkColor);
    return brush;
}

void CLabel::OnMouseMove(UINT nFlags, CPoint point)
{
    if (!m_bMouseTracking)
    {
        TRACKMOUSEEVENT tme = { sizeof(TRACKMOUSEEVENT), TME_LEAVE | TME_HOVER, m_hWnd, HOVER_DEFAULT };
        TrackMouseEvent(&tme);
        m_bMouseTracking = true;
    }
    CStatic::OnMouseMove(nFlags, point);
}

LRESULT CLabel::OnMouseHover(WPARAM wParam, LPARAM lParam)
{
    // 마우스 오버 시 텍스트 색상을 변경합니다.
    SetTextColor(RGB(255, 0, 0));
    return 0;
}

LRESULT CLabel::OnMouseLeave(WPARAM wParam, LPARAM lParam)
{
    // 마우스가 컨트롤을 벗어났을 때 텍스트 색상을 원래대로 복원합니다.
    SetTextColor(RGB(0, 0, 0));
    m_bMouseTracking = false;
    return 0;
}

728x90
반응형
사업자 정보 표시
사업자 등록번호 : -- | TEL : --