Bmp Datei Laden und zeichnen



  • Hab mir in den letzten 2 Stunden folgenden Code mithilfe der MSDN zusammengebsatellt der aber leider nicht funktionieren will. Wäre schön
    wenn wer ne Ahnung hätte wo der Fehler liegen könnte

    case WM_PAINT:
    		{
                PAINTSTRUCT ps;
    			HBITMAP Bild;
    			HDC hdc,hdcMem;
    
                hdc = BeginPaint(hWnd,&ps);
    
    			Bild = (HBITMAP)LoadImage(
    			NULL,				// handle of the instance containing the image
    			"File.bmp",
    			IMAGE_BITMAP,		// type of image
    			0,					// desired width
    			0,					// desired height
    			LR_LOADFROMFILE     // load flags
    			);
    
    			GetObject (Bild, sizeof (BITMAP), &Bild) ; 
    
    			CopyImage(
    			Bild,				// handle of the instance containing the image
    			IMAGE_BITMAP,		// type of image
    			0,					// desired width
    			0,					// desired height
    			LR_COPYRETURNORG    // load flags
    			);
    
    			hdcMem = CreateCompatibleDC (hdc) ;
    			SelectObject (hdcMem, Bild) ;
    			Bild = (HBITMAP)BitBlt(hdc,50,50,10,10,hdcMem,0,0,SRCCOPY);
    			EndPaint(hWnd,&ps);
    			return 0;
    		}
    


  • Ich weiß nicht, warum dein Code nicht funktioniert. Müsste er eigentlich, obwohl du ein paar absolut überflüssige Sachen drinne hast.
    - Lass das CopyImage weg. Wozu?!
    - Der Rückgabewert von BitBlt() ist BOOL. Ich verstehe nicht, wieso du diesen BOOL-Wert deinem Bild zuweist. 😕

    Außerdem hast du vergessen, das Bild am Ende wieder aus dem DC herauszuholen und das DC zu löschen.



  • Man lädt nicht das Bild in jedem WM_PAINT neu. 👎 👎



  • Das außerdem noch, ja!



  • HDC hDC, hMemDC;
    HBITMAP hBitmap;
    PAINTSTRUCT Paint;
    
    case WM_CREATE: //case WM_INITDIALOG:
    	hBitmap = LoadBitmap(GetModuleHandle(NULL),MAKEINTRESOURCE(IDB_BITMAP1));
    	break;
    //...
    case WM_PAINT:
    	hDC = BeginPaint(hWnd,&Paint);
    	hMemDC = CreateCompatibleDC(hDC);
    	SelectObject(hMemDC,hBitmap);
    
    	BitBlt(hDC,0,0,128,128,hMemDC,0,0,SRCCOPY);
    	EndPaint(hWnd,&Paint), DeleteDC(hMemDC);
    
    	return 0;
    //...
    


  • wenn hBitamp static ist könnte es funktionieren ... oder ?

    mfg
    RB


Anmelden zum Antworten