summaryrefslogtreecommitdiffabout
path: root/ColorButton.cpp
blob: d70287597deaf2ccb3e63abed90f0137923f59bb (plain)
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
// ColorButton.cpp : implementation file
//

#include "stdafx.h"
#include "T42.h"
#include "ColorButton.h"

#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CColorButton

CColorButton::CColorButton()
{
}

CColorButton::~CColorButton()
{
}


BEGIN_MESSAGE_MAP(CColorButton, CButton)
	//{{AFX_MSG_MAP(CColorButton)
	//}}AFX_MSG_MAP
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CColorButton message handlers


void CColorButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct) 
{
	ASSERT(lpDrawItemStruct->CtlType==ODT_BUTTON);
CDC* pDC = CDC::FromHandle(lpDrawItemStruct->hDC);
CRect rc(lpDrawItemStruct->rcItem);
	pDC->DrawFrameControl(
		&rc,
		DFC_BUTTON,
		DFCS_BUTTONPUSH|(
			(lpDrawItemStruct->itemState&ODS_DISABLED)
			? DFCS_INACTIVE
			: (
				(lpDrawItemStruct->itemState&ODS_SELECTED)
				? DFCS_PUSHED
				: 0
			)
		)|DFCS_ADJUSTRECT
	);
	if(!(lpDrawItemStruct->itemState&ODS_DISABLED)){
	CBrush b(m_Color);
		pDC->FillRect(rc,&b);
		if(lpDrawItemStruct->itemState&ODS_FOCUS)
			pDC->DrawFocusRect(rc);
	}
CString txt;
	GetWindowText(txt);
	if((lpDrawItemStruct->itemState&ODS_DISABLED)){
	CSize sz = pDC->GetOutputTextExtent(txt);
		if(txt.Find('&')>=0)
			sz.cx-=pDC->GetOutputTextExtent("&",1).cx;
	CRect rcc;
		rcc.top=rcc.bottom=rc.CenterPoint().y;
		rcc.left=rcc.right=rc.CenterPoint().x;
		rcc.InflateRect(sz.cx/2,sz.cy/2);
		pDC->DrawState(rcc.TopLeft(),rcc.Size(),(LPCTSTR)txt,DST_PREFIXTEXT|DSS_DISABLED,TRUE,0,(HBRUSH)NULL);
	}else{
	COLORREF ocol = pDC->SetTextColor(/*RGB(255,255,255)^*/~m_Color);
	int omo = pDC->SetBkMode(TRANSPARENT);
		pDC->DrawText(txt,&rc,DT_CENTER|DT_SINGLELINE|DT_VCENTER);
		pDC->SetBkMode(omo);
		pDC->SetTextColor(ocol);
	}
}

COLORREF CColorButton::SelectColor(COLORREF color)
{
CColorDialog cd(color,CC_RGBINIT,this);
	if(cd.DoModal()==IDOK)
		return cd.GetColor();
	else
		return color;
}

void CColorButton::SetColor()
{
	m_Color=SelectColor(m_Color);
	Invalidate();
}