Initial Upload Week 4 [19/10]
This commit is contained in:
111
Bitmap.cpp
Normal file
111
Bitmap.cpp
Normal file
@ -0,0 +1,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);
|
||||
}
|
Reference in New Issue
Block a user