2013-01-04 30 views
7

Tôi đang cố gắng triển khai đệm đôi nhưng có vẻ như không hoạt động tức là đồ họa vẫn nhấp nháy.Đệm đôi? Win32 C++

WM_PAINT được gọi mỗi khi chuột di chuyển. (WM_MOUSEMOVE)

dán WM_PAINT dưới đây:

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); 
     } 

Trả lời

9

Thêm xử lý như sau:

case WM_ERASEBKGND: 
    return 1; 

Lý do nó hoạt động được vì thông điệp này được gửi trước khi sơn để đảm bảo bức tranh đó được thực hiện trên nền của lớp cửa sổ. Việc nhấp nháy đang đi qua lại giữa hậu cảnh và những gì được vẽ trên đó. Một khi nền đã ngừng được sơn, nó dừng xung đột với những gì được vẽ trên nó, trong đó bao gồm làm đầy các cửa sổ với một màu rắn, do đó, vẫn sẽ có một nền anyway.