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)