-
Notifications
You must be signed in to change notification settings - Fork 0
/
MyButton.cpp
105 lines (81 loc) · 2.48 KB
/
MyButton.cpp
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
102
103
104
105
// MyButton.cpp : implementation file
//
#include "stdafx.h"
#include "YFDevice.h"
#include "MyButton.h"
// MyButton
IMPLEMENT_DYNAMIC(MyButton, CButton)
MyButton::MyButton() : clr(RGB(200, 200, 200))
{
}
MyButton::~MyButton()
{
}
BEGIN_MESSAGE_MAP(MyButton, CButton)
END_MESSAGE_MAP()
// MyButton message handlers
void MyButton::DrawItem(LPDRAWITEMSTRUCT lpDrawItemStruct)
{
CDC dc;
dc.Attach(lpDrawItemStruct->hDC); //Get device context object
CRect rt;
rt = lpDrawItemStruct->rcItem; //Get button rect
dc.FillSolidRect(rt, clr); //Fill button with blue color
UINT state = lpDrawItemStruct->itemState; //Get state of the button
if(!IsWindowEnabled()){
dc.DrawEdge(rt,EDGE_ETCHED,BF_RECT); // Draw a sunken face
}
else if ( (state & ODS_SELECTED) ) // If it is pressed
{
dc.DrawEdge(rt,EDGE_SUNKEN,BF_RECT); // Draw a sunken face
}
else
{
dc.DrawEdge(rt,EDGE_RAISED,BF_RECT); // Draw a raised face
}
// draw the bitmap
if(NULL != m_bitmap.GetSafeHandle())
{
// create a memory DC
CDC memDC;
memDC.CreateCompatibleDC(&dc);
// select the bitmap into the memory DC
CBitmap* pbmpOld = memDC.SelectObject(&m_bitmap);
// get BITMAP structure to find bitmap dimensions
BITMAP bmp;
m_bitmap.GetBitmap(&bmp);
// (stretch) blit from memory DC to button DC
dc.StretchBlt(2, 2, // destination coordinates
rt.Height()-4, rt.Height()-4, // destination dimensions
&memDC, // source DC
0, 0, // source coordinates
bmp.bmWidth, bmp.bmHeight, // source dimensions
SRCCOPY); // raster operation
// restore the inital attributes of memory DC
memDC.SelectObject(pbmpOld);
}
CString strTemp;
GetWindowText(strTemp);
if(IsWindowEnabled()) {
dc.SetTextColor(RGB(0,0,0));
} else {
dc.SetTextColor(RGB(125,125,125));
}
dc.DrawText(strTemp,rt,DT_CENTER|DT_VCENTER|DT_SINGLELINE);
if ( (state & ODS_FOCUS ) ) // If the button is focused
{
// Draw a focus rect which indicates the user
// that the button is focused
int iChange = 3;
rt.top += iChange;
rt.left += iChange;
rt.right -= iChange;
rt.bottom -= iChange;
dc.DrawFocusRect(rt);
}
dc.Detach();
}
void MyButton::SetBitMap(UINT bitmapId)
{
m_bitmap.LoadBitmap(bitmapId);
}