Ungewollter Effekt bei BitBlt()



  • Folgender Code bringt ungewollterweise diesen Effekt:

    case WM_PAINT:
            {
                PAINTSTRUCT ps;
    
                BeginPaint(m.getHwnd(), &ps);
    
                HBITMAP hBmp = (HBITMAP)LoadImage(m.getInstanceHandle(), "bild.bmp", IMAGE_BITMAP, 0, 0, LR_LOADFROMFILE);
    
                HDC hdcWindow = GetDC(m.getHwnd());
                HDC hdcMemory = CreateCompatibleDC(hdcWindow);
    
                SelectObject(hdcMemory, hBmp);
    
                static int i = 0;
    
                BitBlt(hdcWindow, i++, i++, 500, 500, hdcMemory, 0,0, SRCCOPY);
    
                DeleteObject(hBmp);
    
                DeleteDC(hdcMemory);
                ReleaseDC(m.getHwnd(), hdcWindow);
    
                EndPaint(m.getHwnd(), &ps);
            } break;
    

    Das Bild bleibt sozusagen immer da, wo es schon war, "kleben". Wie kann ich das beheben?



  • z.B. mit FillRect() vorher alles weglöschen?



  • Du bräuchtest noch ne Leinwand, vermute ich mal

    // ich hol mir das Handle meist hier schon
    	HDC hdcWindow = BeginPaint(m.getHwnd(), &ps);
    
    	HBITMAP hbmpCanvas = CreateCompatibleBitmap(hdcWindow, SCREEN_WIDTH, SCREEN_HEIGHT);
    
    	...
    
    	SelectObject(hdcMemory , hbmpCanvas);
    	BitBlt(hdcWindow, 0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, hdcMemory, 0, 0, SRCCOPY);
    
    	DeleteObject(hbmpCanvas);
    	EndPaint(m.getHwnd(), &ps);
    

    (ungetestet)


Anmelden zum Antworten