Windows/MFC

CButtonExFlatProperty

aucd29 2013. 10. 2. 18:12
[code]
// ButtonExFlat.cpp : implementation file
//

// DATE        : March 9, 2007
// CODER    : aucd29 (aucd29@gmail.com)
// VERSION    : 1.0
//
//
// -----------------------------------------------------
// FIX : March 29, 2007
// -----------------------------------------------------
// * button을 drag 후에 mouseout 상태에서 lbuttonup 을
// 할경우 이벤트가 발생하지 않아야되는데 발생한 것을
// 수정
//

#include "StdAfx.h"
#include "ButtonExFlatProperty.h"
#include "PropertySheetExt.h"

CButtonExFlatProperty::CButtonExFlatProperty(void)
{
}

CButtonExFlatProperty::CButtonExFlatProperty(int nID)
: m_nID(nID)
{
}

CButtonExFlatProperty::~CButtonExFlatProperty(void)
{
}
BEGIN_MESSAGE_MAP(CButtonExFlatProperty, CButtonExFlat)
    ON_WM_LBUTTONDOWN()
    ON_WM_LBUTTONDBLCLK()
    ON_WM_PAINT()
END_MESSAGE_MAP()

void CButtonExFlatProperty::OnLButtonDown(UINT nFlags, CPoint point)
{
    CButtonExFlat::OnLButtonDown(nFlags, point);
}

void CButtonExFlatProperty::OnLButtonDblClk(UINT nFlags, CPoint point)
{
    // 더블클릭 막기
}

void CButtonExFlatProperty::OnPaint()
{
    CPaintDC dc(this); // device context for painting
    
    // dc 객체를 생성하고
    InitObject(&dc);

    // AUTORADIO 방식이므로 체크가 되어 있으면 클릭된
    // 모습을 보이며 아니라면 마우스 상태에 따라서
    // 버튼에 모양을 변동해준다.
    if (GetCheck())
    {
        mDC.FillSolidRect(m_rect, m_crActiveBackground);
        mDC.FrameRect(m_rect, &CBrush(m_crActiveBorder));
    }
    else
    {
        switch(m_nMouseStatus)
        {
        case _MOUSEOUT:
            mDC.FillSolidRect(m_rect, RGB(255, 255, 255));        
            break;
        case _MOUSEDOWN:
            mDC.FillSolidRect(m_rect, m_crActiveBackground);
            mDC.FrameRect(m_rect, &CBrush(m_crActiveBorder));
            break;
        case _MOUSEOVER:
            mDC.FillSolidRect(m_rect, m_crOverBackground);
            mDC.FrameRect(m_rect, &CBrush(m_crOverBorder));
            break;
        default:
            break;
        }
    }

    mDC.Ellipse(m_rectCircle);
    mDC.DrawText(m_szWindowText,m_rectText,m_nAlign);
    dc.BitBlt(0, 0, m_rect.Width(), m_rect.Height(), &mDC, 0, 0, SRCCOPY);
}

void CButtonExFlatProperty::OnLButtonUp(UINT nFlags, CPoint point)
{
    CButtonExFlat::OnLButtonUp(nFlags, point);

    if (m_rect.PtInRect(point))
    {
        CTabCtrl* pTab;
        CPropertySheetExt* pWnd = static_cast<CPropertySheetExt*>(GetParent()->GetParent());

        // 선택한 아이템으로 탭을 변경 시키자.
        pTab = pWnd->GetTabControl();
        if (!IsWindow(pTab->GetSafeHwnd()))
        {
            ASSERT(false);
            return;
        }
        pTab->SetCurFocus(m_nID);
        pWnd->SetFrameWindowText(m_szWindowText);
        SetCheck(true);
    }
}
[/code]
[code]
#pragma once
#include "buttonexflat.h"

class CButtonExFlatProperty :
    public CButtonExFlat
{
public:
    CButtonExFlatProperty(void);
    CButtonExFlatProperty(int nID);
    ~CButtonExFlatProperty(void);

protected:
    int m_nID;
public:
    DECLARE_MESSAGE_MAP()
    afx_msg void OnLButtonDown(UINT nFlags, CPoint point);
    afx_msg void OnLButtonDblClk(UINT nFlags, CPoint point);
    afx_msg void OnPaint();
    afx_msg void OnLButtonUp(UINT nFlags, CPoint point);
};

[/code]