Bild wird nicht angezeigt

Du müsstest auf die WM_PAINT Nachricht reagieren und dort die nachfolgende Zeichenroutine implementieren.
"hBitMap" muss entweder ein globale Variable oder ein Member der Fensterklasse sein (falls du sowas hast).
C++:
if( hBitMap )
{
    BITMP bm;
    GetObject(hBitMap, sizeof(BITMAP), &bitmap);

    HDC     hMemDC = CreateCompatibleDC(hdc);
    HBITMAP hbmOld = SelectObject(hMemDC, hBitMap);

    BitBlt( hdc,
            X_POSITION, /*TODO Position zuweisen */
            Y_POSITION, /*TODO Position zuweisen */
            bm.bmWidth,
            bm.bmHeight,
            hMemDC,
            0,
            0,
            SCRCOPY );
        
    SelectObject(hMemDC, hbmOld);
    DeleteObject(hMemDC); 
}
Gruß
MCoder
 
Das klappt auch nicht :-(
Gibt es keine Möglichkeit mein Bild über die Resource anzeigen zu lassen?
Bei meinen Buttons mit Bildern klappt das ja auch.
Was ist denn daran falsch?:
Code:
static HBITMAP      hBitMap;
hBitMap = (HBITMAP)LoadImage(0,MAKEINTRESOURCE(ID_BITMAP_MA),IMAGE_BITMAP,0,0,LR_DEFAULTSIZE | LR_CREATEDIBSECTION );
          GetObject (hBitMap, sizeof (BITMAP), &bitmap) ;

Liebe Grüße
Sunflower84
 
Button-Steuerelemente unterstützen die Anzeige von Bitmaps; normale Fenster nicht. Hier müssen die Zeichenroutinen dann selbst implementiert werden.
Dein Code ist leider nur ein kleiner Teil von dem was nötig wäre. Wenn mein Beispiel an dr richtigen Stelle eingebaut wird, sollte es eigentlich funktionieren.
Wie programmierst du denn? Benutzt du nur die Win32-API oder auch irgendeine Klassenbibliothek?

Gruß
MCoder
 
Dann musst du ja irgendwo ein WndProc haben, in der du die Zeichenoperation bei WM_PAINT unterbringen kannst:
C++:
LRESULT APIENTRY WndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) 
{ 
    ...
    
    switch (message) 
    { 
        case WM_PAINT:
            if( hBitMap )
            {
                PAINTSTRUCT ps
                HDC hdc = BeginPaint(hwnd, &ps); 
    
                BITMP bm;
                GetObject(hBitMap, sizeof(BITMAP), &bitmap);
 
                HDC     hMemDC = CreateCompatibleDC(hdc);
                HBITMAP hbmOld = SelectObject(hMemDC, hBitMap);
 
                BitBlt( hdc,
                        10, /*TODO richtige Position zuweisen */
                        10, /*TODO richtige Position zuweisen */
                        bm.bmWidth,
                        bm.bmHeight,
                        hMemDC,
                        0,
                        0,
                        SCRCOPY );
        
                SelectObject(hMemDC, hbmOld);
                DeleteObject(hMemDC); 
        
                EndPaint(hwnd, &ps); 
                return 0L;
            }
            break;
            
            ...
            
    }
    
    ...
}
Gruß
MCoder
 
Hab es mal so versucht, bekomme keine Fehlermeldung aber das Bild erscheint auch nicht.
Code:
       case WM_PAINT:
         hBitMap = (HBITMAP)LoadImage(0,MAKEINTRESOURCE(ID_BITMAP_MA),IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_LOADFROMFILE|LR_CREATEDIBSECTION);
         GetObject (hBitMap, sizeof (BITMAP), &bitmap);
         hdc = BeginPaint (hwnd, &ps) ;
         hdcMem = CreateCompatibleDC (hdc) ;
         SelectObject (hdcMem, hBitMap) ;
		 BitBlt (hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight,hdcMem, 0, 0, SRCCOPY) ;
         DeleteDC (hdcMem) ;
         EndPaint (hwnd, &ps) ;        
         return 0 ;

Gruß
Sunflower84
 
Habs raus gemacht. Funktioniert aber immer noch nicht. Auch dein Script nicht. Zwar keine Fehlermeldung aber geht leider nicht.
Sieht momentan so aus:
Code:
       case WM_PAINT:
         hBitMap = (HBITMAP)LoadImage(0,MAKEINTRESOURCE(ID_BITMAP_MA),IMAGE_BITMAP, 0, 0, LR_DEFAULTSIZE|LR_CREATEDIBSECTION);
         GetObject (hBitMap, sizeof (BITMAP), &bitmap);   
         hdc = BeginPaint (hwnd, &ps) ;
         hdcMem = CreateCompatibleDC (hdc) ;
         SelectObject (hdcMem, hBitMap) ;
		 BitBlt (hdc, 0, 0, bitmap.bmWidth, bitmap.bmHeight,hdcMem, 0, 0, SRCCOPY) ;
         DeleteDC (hdcMem) ;
         EndPaint (hwnd, &ps) ;        
         return 0 ;

Der resource name stimmt auch.

Gruß
Sunflower84
 
Zurück