-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathBitmap.cpp
More file actions
111 lines (92 loc) · 2.04 KB
/
Copy pathBitmap.cpp
File metadata and controls
111 lines (92 loc) · 2.04 KB
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
106
107
108
109
110
111
#include "Bitmap.h"
Bitmap::Bitmap()
{
}
Bitmap::~Bitmap()
{
// Ensure we clean up any existing bitmap
DeleteBitmap();
}
// Create a new bitmap of the specified width and height, deleting any existing bitmap
//
// Returns value of false if bitmap cannot be created.
bool Bitmap::Create(HWND hWnd, unsigned int width, unsigned int height)
{
bool status = false;
HDC hDc;
// Delete any existing bitmap
DeleteBitmap();
// Create a device context compatible with the window device context
hDc = ::GetDC(hWnd);
_width = width;
_height = height;
_hMemDC = CreateCompatibleDC(hDc);
if (_hMemDC != 0)
{
// Create a bitmap compatible with the window
_hBitmap = CreateCompatibleBitmap(hDc, _width, _height);
if (_hBitmap != 0)
{
// Select the bitmap into the new device context, saving any old bitmap handle
_hOldBitmap = static_cast<HBITMAP>(SelectObject(_hMemDC, _hBitmap));
status = true;
}
}
// Release the device context for the window
ReleaseDC(hWnd, hDc);
return status;
}
// Return device context of bitmap
HDC Bitmap::GetDC() const
{
return _hMemDC;
}
// Return width of bitmap
unsigned int Bitmap::GetWidth() const
{
return _width;
}
// Return height of bitmap
unsigned int Bitmap::GetHeight() const
{
return _height;
}
// Delete any existing bitmap
void Bitmap::DeleteBitmap()
{
// Select any default bitmap that existed for the device context
if (_hOldBitmap != 0 && _hMemDC != 0)
{
SelectObject(_hMemDC, _hOldBitmap);
_hOldBitmap = 0;
}
// Delete any existing bitmap
if (_hBitmap != 0)
{
DeleteObject(_hBitmap);
_hBitmap = 0;
}
// Delete any existing bitmap device context
if (_hMemDC != 0)
{
DeleteDC(_hMemDC);
_hMemDC = 0;
}
}
// Clear bitmap using the specified brush
void Bitmap::Clear(HBRUSH hBrush) const
{
RECT rect;
rect.left = 0;
rect.right = _width;
rect.top = 0;
rect.bottom = _height;
FillRect(_hMemDC, &rect, hBrush);
}
// Clear bitmap using the specified colour
void Bitmap::Clear(COLORREF colour) const
{
HBRUSH brush = CreateSolidBrush(colour);
Clear(brush);
DeleteObject(brush);
}