[ Rato iks de @ 16.09.2011. 17:03 ] @
Imam problem sa prikazivanjem bitmape. Prikazujem bitmapu iz resursa.
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); 


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


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


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 ;)
[ X Files @ 16.09.2011. 18:48 ] @
U kom trenutku unistavas pokazivac na bitmapu (delete Pozadina1;)? Iz primera se zakljucuje da je prvo unistavas pa zatim koristis...
[ Rato iks de @ 16.09.2011. 20:49 ] @
Da tako je. U zavrsnom .cpp fajlu prvo koristim metodu koja pravi ove bitmape, zatim ide metoda kojom ih i uništavam
a iza njih metoda kojim ih trebam ispisati.
Tako sam i definisao u klasi Bitmap.

Ja mogu problem da riješim tako što ću iscrtavati jednu po jednu bitmapu. Ali ja sam zamislio da nakon
određenog ciklusa promjenim pozadinu.

E to se može odraditi ovako da crtam jednu po jednu bitmapu.
Code:

            HBITMAP Pozadina1;
            Pozadina1 = LoadBitmap(hInst, MAKEINTRESOURCE(IDB_POZADINA1));
        MemDCPozadina1 = CreateCompatibleDC(hdc);
             
             SelectObject(MemDCPozadina1, Bar);
         BitBlt(hdc, 0, 0, 500, 400, MemDCPozadina1, 0, 0, SRCCOPY);

        DeleteDC(MemDCPozadina1);
        DeleteObject(Pozadina1);    


E ovako radi to dobro ali ja mislim da je bezveze. Isto kao kad imaš da ispišeš 100 brojeva pa ideš cout<<"1"... pa sve tako do stoje :)