Primitives CBitmap-Problem, das mich zur tiefsten Verzweiflung bringt :-(
-
FAQ und selbst die Such-Funktion konnten mich nicht aus meiner verzweifelten Situation befreien.Stets dachte ich, mit folgendem Code kopiert man einen Fensterinhalt in ein CBitmap-Objekt
CBitmap bitmap; // Definiert im Header //~~~~~ Kopierfunktion - Anfang ~~~~~ CWindowDC dc(this); bitmap.CreateCompatibleBitmap(&dc, Fensterbreite, Fensterhöhe); //~~~~~ Kopierfunktion - Ende ~~~~~Zuallererst klappte dies hervorragend. Das Bild des Fensters befand sich tatsächlich als Bitmap wieder.
Stutzig wurde ich aber, als ich das Programm neu kompilierte und im CBitmap-Objekt auf einmal nicht der Inhalt des derzeitigen Fensters, sondern der vom vorigen Programm-Ablauf (vor dem Kompilieren!!!) zu sehen war.
Noch stutziger wurde ich, als sich beim Programmschluss alle Icons des VC++-Programms in hyroglypisch-artige nichtssagende Zeichen verwandelten. Ich konnte nur noch erraten, was welcher SpeedButton für eine Bedeutung hatte!Ist euch das auch schon mal passiert? - Ich glaube nicht und hoffe, es ist nur ein primitiver Fehler...
Könnt ihr mir sagen, wie man den Fensterinhalt tatsächlich in ein CBitmap-Objekt kopiert? Ich würde mich freuen!
-
Du musst noch ein DC erstellen (via CDC:CreateCompatibleDC) und dort das Bitmap reinselektieren.
Dann mit BitBlt kopieren.void CTestDlg::OnOK() { CDC* dc = GetDC(); CDC memDC; memDC.CreateCompatibleDC(dc); CBitmap bitmap; bitmap.CreateCompatibleBitmap(dc,100,100); CBitmap* oldBitmap = memDC.SelectObject(&bitmap); memDC.BitBlt(0,0,100,100,dc,0,0,SRCCOPY); // Nun kopiert memDC.SelectObject(oldBitmap); // Altes Bitmap wieder selektieren ReleaseDC(dc); }
-
Endlich kann ich wieder lachen!Danke für den Code...