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