Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C/WIN32 API] GDI: Doppio buffering
Forum - C/C++ - [C/WIN32 API] GDI: Doppio buffering

Avatar
giorgio_kollias (Normal User)
Newbie


Messaggi: 1
Iscritto: 09/08/2012

Segnala al moderatore
Postato alle 1:15
Giovedì, 09/08/2012
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:

Codice sorgente - presumibilmente C/C++

  1. // Nel WinMain
  2.  
  3. SetTimer(hwnd,101,1,Scroll);
  4.  
  5. //Nella WindowProcedure
  6.  
  7. case WM_PAINT:
  8.     wDC = BeginPaint(hwnd, &wps);
  9.     hMemDC = CreateCompatibleDC(wDC);
  10.     SelectObject(hMemDC, BitBackG);
  11.     GetObject(BitBackG, sizeof(bm), &bm);
  12.     Width=bm.bmWidth+(WLimits.bottom-bm.bmHeight);
  13.     if(Width<WLimits.right) Width=WLimits.right;
  14.     StretchBlt(wDC, BackGx, 0, Width, WLimits.bottom, hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
  15.     StretchBlt(wDC, BackGx+Width, 0, Width, WLimits.bottom, hMemDC, 0, 0, bm.bmWidth, bm.bmHeight, SRCCOPY);
  16.     DeleteDC(hMemDC);
  17.     EndPaint(hwnd, &wps);
  18.     break;
  19.  
  20. // Funzione Scroll
  21.  
  22.   BackGx-=5;
  23.   if(BackGx<-Width) BackGx=0;
  24.   InvalidateRect(hwnd, &WLimits, FALSE);
  25.   UpdateWindow(hwnd);




come si può trasformare in modo che funzioni con il doppio buffering?

Ultima modifica effettuata da giorgio_kollias il 09/08/2012 alle 1:16
PM Quote