HBITMAP in die Zwischenablage



  • Hallo,

    ich möchte ein HBITMAP-Objekt in die Zwischenablage kopieren, habe dazu den folgenden Code gewählt, wobei m_hBitmap als public definiert wurde:

    if (::OpenClipboard(...))
    {
     ::EmptyClipboard();
     ::SetClipboardData(CF_BITMAP, m_hBitmap);
     ::CloseClipboard()
    }
    

    Kopiert wird es ja, aber wenn ich in meinem Programm spätrer noch einmal auf m_hBitmap zugreifen möchte, ist der Inhalt NULL. Wahrscheinlich, weil sich Clipboard das Objekt vollständig gegriffen hat und für andere Programme sperrt.

    Die MSDN gibt zwar einen Tipp mit HGLOBAL, nur hab ich keine Ahnung, was zu tun ist.

    Würde mich über den richtigen Code oder weiterführende Gedanken freuen!



  • Na gugge ma da 🙂

    http://www.codeproject.com/clipboard/

    Korrekterweise müßtest du das zu kopierende BITMAP zunächst in die Desktopfarbtiefe konvertieren. Ansonsten funktionier das Paste dann nicht.



  • Falls es jemanden interessiert: Durch Zufall habe ich einen Weg gefunden, das Bild ohne Folgeschäden zu kopieren...

    if (::OpenClipboard(...))
    {
     ::EmptyClipboard();
     HBITMAP hB = (HBITMAP)CopyImage(m_hBitmap,IMAGE_BITMAP,0,0,LP_COPYRETURNORG);
     ::SetClipboardData(CF_BITMAP, hB);
     ::CloseClipboard()
    }
    

Anmelden zum Antworten