Anfänger - MemDC funzt für Linien nur, wenn ich vorher Bitmap wähle
-
Hi!
Ich fange gerade mit VC++ 6.0 und MFC an. Und habe ein Problem, dessen Ursache ich nicht erkennen kann.
Der Text und die Linie wird nur sichtbar, wenn ich vorher auch das Bitmap zeichne. Wenn ich das Bitmap weglasse, wird mir gar nichts angezeigt. Aber wenn ich auf die Geschichte mit dem dcMem verzichte und direkt in den pdc zeichne, dann funktioniert es auch ohne Bitmap.
Kann mir jemand erklären, warum das so ist?
void CFVermDlg::ShowBitmap(CPaintDC *pdc) { int x = 0; int y = 0; CDC dcMem; dcMem.CreateCompatibleDC(pdc); CPen lPen(PS_SOLID, 10, RGB(0,0,0)); CRect lRect; GetClientRect(lRect); lRect.NormalizeRect(); CBitmap* pOldBitmap; pOldBitmap = (CBitmap*)dcMem.SelectObject(&m_bmpBitmap); dcMem.DrawText("HALLO WELT", lRect, NULL); dcMem.SelectObject(&lPen); dcMem.MoveTo(0,0); dcMem.LineTo(200,200); pdc->BitBlt(x,y,lRect.Width(),lRect.Height(),&dcMem,0,0,SRCCOPY); }
-
Das is doch ganz einfach, wenn du in nen DC Zeichnen willst, was zumindest mit dem Screnn zu tun hat brauchst du eine Bitmap zum drauf zeichnen. Ansonnsten is das so als hättest du ein bleistift in der Hand und wüsstest die abmessungen usw. hast aber kein Papier zum drauf rum malen.
Das du driect in den ScrennDC zeichnen kannst und das angezeigt wird is ja klar, sonnst würde ja der ganze Inhalt deines Windows nicht da sein.
Hoffe das Hilt dir als Erklärung weiter
-
Weitere Anmerkung:
Dieser Codee ist extrem buggy, weil Objekte in einen DC selektiert werden, die nicht wieder aus dem DC entfernt werden und der DC wird zerstört.
Die Folge: GDI Leaks ohne Ende.Weiter Tipp: Nimm doch einfach die bewährte CMemDC Klasse.
-
Danke für die Antworten.
Hab jetzt noch 2 "Folgefragen"
Welchen Vorteil hätte CMemDC gegenüber CDC?
Mit welcher Methode von CDC/CMemDC sollte ich den CDC "füllen", damit ich LineTo verwenden kann?Gruß