2016-03-06 3 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

Если ваши намерения опираться на другое приложение, может я предлагаю создать окно в верхней части этого приложения и сделать на этом.

Смежные вопросы