2013-01-04 16 views
7

मैं डबल बफरिंग को लागू करने की कोशिश कर रहा हूं लेकिन ऐसा लगता है कि ग्राफिक अभी भी झिलमिलाहट नहीं है।डबल बफरिंग? Win32 C++

जब माउस चलता है तो WM_PAINT हर बार कॉल किया जाता है। (WM_MOUSEMOVE)

नीचे

चिपकाया गया 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); 
     } 

उत्तर

9

निम्नलिखित हैंडलर जोड़ें:

case WM_ERASEBKGND: 
    return 1; 

कारण यह काम करता है है यह संदेश है कि पेंटिंग सुनिश्चित करने के लिए पेंटिंग से पहले भेज दिया जाता है, क्योंकि पर किया जाता है खिड़की वर्ग की पृष्ठभूमि। चमकती पृष्ठभूमि के बीच आगे और आगे जा रही है और इसके बारे में क्या चित्रित किया गया है। एक बार पृष्ठभूमि को पेंट करने से रोक दिया गया है, यह उस पर चित्रित किए गए विवाद से रोकता है, जिसमें खिड़की को ठोस रंग से भरना शामिल है, इसलिए फिर भी पृष्ठभूमि होगी।

संबंधित मुद्दे