Wie kann ich Gdiplus::Image in Zwischenablage kopieren?



  • Hallo zusammen!

    Ich versuche ein Objekt vom Typ Gdiplus::Image in Zwischenablage kopieren, damit später in einer Anwendung (z.B. MS-Word, Paint, Photoshop etc.) mit Hilfe Ctrl-V einfügen möglich wäre.

    Dafür benutze ich follgende Routine

    if(!OpenClipboard(NULL))
            return 0;
        EmptyClipboard();
        HBITMAP hbitmap1;
        Bitmap* bitmapImg1 = new Bitmap(L"C:\\Users\\User1\\Desktop\\1.jpg");
        UINT w = bitmapImg1->GetWidth();
        UINT h = bitmapImg1->GetHeight();
    
        Color bgColor = Color::White;
        bitmapImg1->GetHBITMAP(bgColor, &hbitmap1);
        SetClipboardData(CF_BITMAP, hbitmap1);
    
        CloseClipboard();
    

    Alles läuft ohne Fehlern.
    Aber beim Enfügen-Aktion wird in andere Programm nichts eingefügt.

    Kann mir jemand sagen, was in meinem Qulellkode stimmt nicht.
    Danke im voraus
    YK


  • Mod

    Und hBitmap1 ist != NULL?



  • Und hBitmap1 ist != NULL?

    Nein es ist nicht NULL



  • CF_BITMAP ist mir sowieso immer suspekt, bei der MSDN, die mit VS 2008 ausgeliefert wird, steht bei CF_BITMAP unter SetClipboardData "Not supported.".
    Nimm doch einfach CF_DIB und speichere eine "packed Dib" (BITMAPINFOHEADER + optionale Farbtabelle (für <24bpp) + die Pixeldaten selbst in einem per GlobalAlloc erstellten Speicherbereich.



  • Ohje, ich sehe gerade, dass dies für CE gilt. Naja, nichtsdestotrotz würde ich immer CF_DIB nehmen 😉


Anmelden zum Antworten