Memory DC - Problem mit logischen Koordinaten
-
Hi,
ich habe das Problem, das mein Memory-DC in der OnDraw() Methode nach einem BitBlt als kleiner schwarzer Kasten im Fenster erscheint. Das Problem muss an meinem logischen Koordinatensystem liegen und das ich (vielleicht) die Größe der Bitmap für den memDC nicht richtig einstelle...
Hier der Code der OnPrepareDC() Methode:
// Logische Abbildung definieren pDC->SetMapMode(MM_ISOTROPIC); CSize oldWndExt = pDC->SetWindowExt(30000,-30000); pDC->SetWindowOrg(-15000,15000); // Geräteabhängige Abbildung definieren CRect clientRect; GetClientRect(clientRect); CSize oldViewExt = pDC->SetViewportExt(clientRect.right,clientRect.bottom); pDC->SetViewportOrg(0,0);In der OnDraw() Methode möchte ich nun den MemoryDC nutzen, um die Grafikausgabe double-buffered durchzuführen. Hier der Code:
CDC memDC; memDC.CreateCompatibleDC(pDC); CBitmap memBMP; // Hier liegt das Problem: Wie bekomme ich die korrekte Größe? CSize viewExt = pDC->GetViewportExt(); VERIFY(memBMP.CreateCompatibleBitmap(pDC, viewExt.cx, viewExt.cy) == TRUE); memDC.SelectObject(memBMP); // ... zeichnen pDC->BitBlt(0,0,viewExt.cx,viewExt.cy,&memDC,0,0,SRCCOPY); memDC.DeleteDC();Ich habe bereits mit GetViewportExt, GetWindowExt und GetClientRect herumprobiert und jeweils die entsprechenden Koordinaten in CreateCompatibleBitmap ausprobiert. Das Ergebnis ist jedesmal ein kleiner, schwarzer Kasten, der sich bei den drei Methoden lediglich leicht in der Größe unterscheidet.
Würde mich über Hinweise freuen!
Gruß
Prog
-
Hat keiner eine Idee, was hier falsch läuft?
Ich bin nämlich am Rande der Verzweiflung. Hatte vor ein Paar Tagen mal versucht einen memory DC mit der Win32-API und GDI zu erzeugen. Da lief alles problemlos...