mfc i double buffering. Problem z bitmapą.

0

Dzień dobry. Przepraszam jeśli zamieściłem temat w złym dziale, ale ten wydaje się odpowiedni. Próbuję zrobić prosty program na wzór painta, jednak mam pewien problem. Chcę stworzyć bitmapę, która przechowuje rysunek, a następne przy ponownym rysowaniu wyświetla ją i dodaje kolejny element. Nie wiem dlaczego, ale funkcja CreateCompatibleBitmap() tworzy mi czarny prostokąt i jednocześnie zwraca true. Wydaje mi się, że reszta kodu jest poprawna. Kiedy pobieram obrazek z pliku wyświetla się prawidłowo. Czy wie ktoś, dlaczego tak się dzieje?

void CPaintView::OnDraw(CDC* pDC)
{
	CPaintDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	if (!pDoc)
		return;

	obiekty = pDoc->dajObiekty();

	if (obiekty.size() >= 1)
	{
		// tutaj trzeba odtworzyc kopie ekranu
		CDC pMemDC;
		BITMAP wymiaryBIT;
		bitmapa->GetBitmap(&wymiaryBIT);
		pMemDC.CreateCompatibleDC(pDC);
		pMemDC.SelectObject(bitmapa);
		pDC->BitBlt(0, 0, wymiaryBIT.bmWidth, wymiaryBIT.bmHeight, &pMemDC, 0, 0, SRCCOPY);
		
		// i dorysowac ostatni obiekt
		obiekty[obiekty.size() - 1]->rysuj(pDC);
	}
	// tutaj trzeba stworzyc kopie ekranu
	CRect wymiaryCDC;
	GetClientRect(&wymiaryCDC);
	bitmapa->DeleteObject();
	bitmapa->CreateCompatibleBitmap(pDC, wymiaryCDC.Width(), wymiaryCDC.Height());  /// błąd

/*
	CImage pngImage;
	pngImage.Load(_T(".\\res\\bitmap1.bmp"));
	bitmapa->Attach(pngImage.Detach());
*/
}
1

Nie wiem dlaczego, ale funkcja CreateCompatibleBitmap() tworzy mi czarny prostokąt i jednocześnie zwraca true.

A co miałaby tworzyć? Biały prostokąt? Zielony? Kółko? ;-)
Nie napisałeś na czym problem polega.

CreateCompatibleBitmap tworzy bitmapę dla podanego DC, ale nie kopiuje zawartości. To musisz zrobić sam.

1 użytkowników online, w tym zalogowanych: 0, gości: 1