Kreirao sam klasu Bitmap i postavio pokazivač na nju.
Code:
Bitmap *Pozadina1
//kreiram pozadinu preko konstruktora
Pozadina1 = new Bitmap(hDC, IDB_POZADINA1, hInstance);
//u metodi Delete pobrisem ovu pozadinu
delete Pozadina1;
//u metodi Draw treba da iscrtam tu bitmapu
Pozadina1->Draw(hDC, 0, 0);
Bitmap *Pozadina1
//kreiram pozadinu preko konstruktora
Pozadina1 = new Bitmap(hDC, IDB_POZADINA1, hInstance);
//u metodi Delete pobrisem ovu pozadinu
delete Pozadina1;
//u metodi Draw treba da iscrtam tu bitmapu
Pozadina1->Draw(hDC, 0, 0);
E sad je Pozadina1 pristupila metodama Draw, gdje Draw sadrzi u sebi metodu DrawPart.
Code:
void Bitmap::Draw(HDC hDC, int x, int y, BOOL bTrans, COLORREF crTransColor)
{
DrawPart(hDC, x, y, 0, 0, GetWidth(), GetHeight(), bTrans, crTransColor);
}
void Bitmap::DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
int wPart, int hPart, BOOL bTrans, COLORREF crTransColor)
{
if (m_hBitmap != NULL)
{
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, m_hBitmap);
if (bTrans)
TransparentBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart,
wPart, hPart, crTransColor);
else
BitBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart, SRCCOPY);
SelectObject(hMemDC, hOldBitmap);
DeleteDC(hMemDC);
}
}
void Bitmap::Draw(HDC hDC, int x, int y, BOOL bTrans, COLORREF crTransColor)
{
DrawPart(hDC, x, y, 0, 0, GetWidth(), GetHeight(), bTrans, crTransColor);
}
void Bitmap::DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
int wPart, int hPart, BOOL bTrans, COLORREF crTransColor)
{
if (m_hBitmap != NULL)
{
HDC hMemDC = CreateCompatibleDC(hDC);
HBITMAP hOldBitmap = (HBITMAP)SelectObject(hMemDC, m_hBitmap);
if (bTrans)
TransparentBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart,
wPart, hPart, crTransColor);
else
BitBlt(hDC, x, y, wPart, hPart, hMemDC, xPart, yPart, SRCCOPY);
SelectObject(hMemDC, hOldBitmap);
DeleteDC(hMemDC);
}
}
U klasi Bitmap ove dvije metode su deklarisane tako sto su argumentima bTrans i crTransColor već postavljene na osnovne vrjednosti.
Code:
void Draw(HDC hDC, int x, int y, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));
void DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
int wPart, int hPart, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));
void Draw(HDC hDC, int x, int y, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));
void DrawPart(HDC hDC, int x, int y, int xPart, int yPart,
int wPart, int hPart, BOOL bTrans = FALSE, COLORREF crTransColor = RGB(255, 0, 255));
Takođe, iscrtavanje sprajtova radim preko ovih metoda.
Zato kad iscrtavam bitmapu metodi Draw ne predajem 5 argumenata nego 3. Ne koristim Pozadinu1 kao transparentnu, i boju koju sam naveo RGB(255, 0, 255)
ću koristiti kao transparentnu boju kad budem iscrtavao sprajtove. Samo kad iscrtavam sprajt ja posaljem TRUE varijabli bTrans umjesto FALSE.
Sve se kompajlira, nema errora ni upozorenja ali pozadina crna. Sprajtovi se prikazuju kako i treba ali na crnoj pozadini.
Unaprijed HVALA ;)