schei** GDI - Bitmap prob



  • also manchmal glaub' ich's nicht mehr....
    eine eigentlich (sollte man meinen) ganz einfache Aufgabe ... vielleicht bin ich ja auch nur zu blöd 😡

    -> eine Bitmap-Datei laden
    -> Größe anpassen
    -> und in einem Dialog unter einem Static ausgeben.

    soweit - sogut. bedingung: nur WinAPI

    Lade ich das Teil einfach mit LoadImage() und schicke das Handle dann mit SendDlgItemMessage() an das Static Control, klappt das einwandfrei.

    Versuch ich aber die Größe anzupassen via
    in einen memDC Selektieren, per StretchBlt() in einen 2. memDC mit anderer größe zu übertragen und schicke dann die per GetObject() nun geänderte Bitmap zu holen und an das Static CControl zu schicken, bekomm ich nur einen grauen Kasten.

    Wo liegt das Problem?

    //hPict ist das Sourcehandle

    HDC memDCsrc = CreateCompatibleDC( GetDC( hDlg) );
    HDC memDCdest = CreateCompatibleDC( GetDC( hDlg) );
    newPict = CreateCompatibleBitmap( GetDC( hDlg), 225, 80 );

    SelectObject( memDCsrc, hPict );
    SelectObject( memDCdest, newPict );
    StretchBlt( memDCdest, 0,0, 150,50, memDCsrc, 0,0, 50,10, SRCCOPY);

    destPict = GetCurrentObject( memDCdest, OBJ_BITMAP );
    SendDlgItemMessage( hDlg, IDC_LOCPICT, STM_SETIMAGE, IMAGE_BITMAP, (LPARAM)destPict );

    /Ulli



  • tja. wer lesen kann ist klar im Vorteil 👍

    Aus der Doku:
    (Bitmaps can be selected for memory device contexts only, and for only one device context at a time.)

    Die Lösung:

    DeleteDC( memDCdest );
    DeleteDC( memDCsrc );

    VOR SendDlgItemMessage(), ...und schon klappts mit dem Bild 🙂

    das "and for only one device context at a time" hatte ich überlesen und dazu noch gedacht, dass das Flag LR_SHARED bei LoadImage() durchgreift.
    Na gut, wieder was gelernt 🙄

    /Ulli


Log in to reply