Handleobjekte kopieren



  • Die ganzen Handles sind ja intern nur Zeiger. Das heißt, wenn ich folgenden Code habe:

    HBITMAP bmp=CreateBitmap (400, 300, 1, 1, NULL);
    HBITMAP bmp2=bmp;
    

    dann greifen beide Variablen auf das gleiche Bild zu.

    Nun würd ich gern wissen: Gibt es Funktionen zum 1:1-Kopieren von Objekten, die durch Handles repräsentiert werden? Im obigen Beispiel könnte ich zwar das zweite Bild auch mit CreateBitmap erstellen, beide Bilder in DCs speichern und dann das eine auf das andere blitten, aber das ist ja vergleichsweise umständlich. Gibt es nicht so etwas, wie

    HBITMAP bmp2=CopyHandleObject (bmp);
    

    Am besten wäre es noch, wenn dies eine einzige Funktion wär, die mit allen Handles (HBITMAP, HFONT, HBRUSH etc.) gleichermaßen klarkommt.


  • Mod

    GetObject, CreateBitmap, GetBitmapBits, SetBitmapBits!



  • Das ist ja das, was ich vermeiden will: Man holt sich die Informationen und kopiert dann manuell. Aber ich hätte gern eine Funktion, die alle Grafikhandles gleichermaßen kopieren kann. Ich schätze mal, man kann mit SetBitmapBits keine Schrift (HFONT) erstellen.
    Meine Motivtion ist, daß ich mir eine Wrapper-Klasse für Handles schreiben will, die dann die Aufräumarbeiten (DeleteObject) selbständig vornimmt. Und diese Wrapper-Klasse will ich als Template-Klasse schreiben (Beispiel: Handle<HBITMAP>). Tja, und nun wollte ich gerne einen =-Operator definieren, der Objekte vom eigenen Datentyp übernimmt und dabei nicht einfach nur das Handle kopiert, sondern gleich eine richtige Kopie des Grafikobjekts anlegt. Wenn es da keine einheitliche Funktion gibt, muß ich nämlich für jedes einzelne Handle eine Klasse ableiten (class Bitmap: public Handle<HBITMAP>) und die Funktion entsprechend implementieren.



  • Dafür gibt es keine Funktion. Musst Du Dir selbst basteln.



  • Zumindest für Bilder gibt es eine WinAPi Funktion:

    HANDLE CopyImage( HANDLE hImage, UINT uType, int cxDesired, int cyDesired, UINT fuFlags);
    

    kopieren.


Log in to reply