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...


Anmelden zum Antworten