2016-03-06 182 views
0

可不可以給實現這個例子的代碼雙緩衝最簡單的方法(以防止閃爍):C++的Win32 GDI雙緩衝

HWND hwnd = FindWindow(0, "Untitled - Notepad"); 
HDC hDC_Desktop = GetDC(hwnd); 

... 

     while() 
     { 
        RECT rect = { 10, 10, 10 + 50, 10 + 50 }; 

        FillRect(hDC_Desktop, &rect, ColorBrush); 
        InvalidateRect (hwnd, NULL, TRUE); 
     } 

回答

1

它的「閃爍」的原因是因爲是越來越無效的目標窗口,它正在重繪。由於這不是你的窗口 - 你不一定能控制這個。

如果這是你自己的窗口有一個簡單的策略,以加快繪圖速度並減少閃爍:使用內存DC上繪製和捕捉WM_ERASEBKGND來抑制背景重繪。

在深入講解和戰略固定它(在你的應用程序的窗口):http://www.catch22.net/tuts/flicker-free-drawing

如果你的目的是要借鑑其他應用程序,可能我建議對應用程序頂部創建一個窗口,並借鑑一下。