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();
}
|