mfc i double buffering. Problem z bitmapą.

mfc i double buffering. Problem z bitmapą.
WS
  • Rejestracja:prawie 8 lat
  • Ostatnio:prawie 5 lat
  • Postów:2
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?

Kopiuj
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());
*/
}
edytowany 1x, ostatnio: WojciechSp
Azarien
  • Rejestracja:ponad 21 lat
  • Ostatnio:około 23 godziny
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.

edytowany 1x, ostatnio: Azarien
WS
Dziękuję za odpowiedź. Byłem przekonany, że ta metoda tworzy kompatybilną bitmapę i jednocześnie kopiuję do niej zawartość kontekstu.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.