2013-01-04 28 views
7

Çift arabelleğe almayı deniyorum ama işe yaramıyor gibi görünmüyor, grafik hala titriyor.Çift Arabelleğe Alma? Win32 C++

WM_PAINT, fare hareket ettiğinde her zaman çağrılır. (WM_MOUSEMOVE)

aşağıda

Yapıştırılan WM_PAINT :

case WM_PAINT: 
     { 
      hdc = BeginPaint(hWnd, &ps); 
      // TODO: Add any drawing code here... 
      RECT rect; 
      GetClientRect(hWnd, &rect); 
      int width=rect.right; 
      int height=rect.bottom; 

      HDC backbuffDC = CreateCompatibleDC(hdc); 

      HBITMAP backbuffer = CreateCompatibleBitmap(hdc, width, height); 

      int savedDC = SaveDC(backbuffDC); 
      SelectObject(backbuffDC, backbuffer); 
      HBRUSH hBrush = CreateSolidBrush(RGB(255,255,255)); 
      FillRect(backbuffDC,&rect,hBrush); 
      DeleteObject(hBrush); 


      if(fileImport) 
      { 
       importFile(backbuffDC); 
      } 

      if(renderWiredCube) 
      { 
       wireframeCube(backbuffDC); 
      } 

      if(renderColoredCube) 
      { 
       renderColorCube(backbuffDC); 

      } 

      BitBlt(hdc,0,0,width,height,backbuffDC,0,0,SRCCOPY); 
      RestoreDC(backbuffDC,savedDC); 

      DeleteObject(backbuffer); 
      DeleteDC(backbuffDC); 

      EndPaint(hWnd, &ps); 
     } 

cevap

9

aşağıdaki işleyicisi ekleyin:

case WM_ERASEBKGND: 
    return 1; 

bu mesajı o resmi sağlamak için boya öncesi gönderilir çünkü işleri nedeni yapılır pencere sınıfının arka planı. Yanıp sönen, arka plan ile onun üzerine ne çizildiği arasında gidip geliyor. Arka plan boyanırken durduktan sonra, üzerine boyanmış olanla çelişiyor, bu da pencereyi düz bir renkle doldurmayı içeriyor, dolayısıyla yine de bir arka plan olacak.

İlgili konular