08/08/12 23:15
giorgio_kollias
Salve a tutti, ho creato un piccolo programma che esegue lo scrolling continuo di uno sfondo, ma c'era sempre il problema del flickering. Ho provato ad evitare di ridisegnare, stampando semplicemente la bitmap sopra quella esistente, ma si vede comunque un po' "a scatti", e cercando un po' sul web ho visto che la soluzione per il mio problema è il doppio buffering, ma non ho capito come usarlo... Il codice è questo:
come si può trasformare in modo che funzioni con il doppio buffering?
// Nel WinMain SetTimer(hwnd,101,1,Scroll); //Nella WindowProcedure case WM_PAINT: wDC = BeginPaint(hwnd, &wps); hMemDC = CreateCompatibleDC(wDC); SelectObject(hMemDC, BitBackG); GetObject(BitBackG, sizeof(bm), &bm); Width=bm.bmWidth+(WLimits.bottom-bm.bmHeight); if(Width<WLimits.right) Width=WLimits.right; StretchBlt(wDC, BackGx, 0, Width, WLimits.bottom, hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); StretchBlt(wDC, BackGx+Width, 0, Width, WLimits.bottom, hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY); DeleteDC(hMemDC); EndPaint(hwnd, &wps); break; // Funzione Scroll BackGx-=5; if(BackGx<-Width) BackGx=0; InvalidateRect(hwnd, &WLimits, FALSE); UpdateWindow(hwnd);
come si può trasformare in modo che funzioni con il doppio buffering?
Ultima modifica effettuata da giorgio_kollias 08/08/12 23:16
aaa