Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Системное программирование и WinAPI > Обновить не все окно, а конкретный прямоугольник


Автор: Oreshin 14.8.2007, 07:02
Проблема у меня следующая и меня есть рисунок, который передвигается по таймеру, таймер настроен на 10 мс и когда делаю InvalidateRect(hwnd,NULL,TRUE); то перерисовывается все окно и появляется неприятное мерцание.
Как обновлять не все окно, а конкретный прямоугольник? smile 
И я ещё слышал, что с мерцанием можно бороться, если подключить двойной буфер, но как его подключить не знаю. smile 

Автор: _hunter 14.8.2007, 10:46
эм...
Цитата

lpRect 
[in] Pointer to a RECT structure that contains the client coordinates of the rectangle to be added to the update region. If this parameter is NULL, the entire client area is added to the update region. 

подключить двойной буффер очень просто: создаеш в памяти bitmap; рисуеш на нем; а потом целиком этот битмап копируеш на DC.

Автор: Oreshin 14.8.2007, 13:51
Код

...
RECT *obl;
obl->bottom= 1;
obl->left    = 1;
obl->right    = 10;
obl->top    = 10;
InvalidateRect(hWnd,obl,TRUE);
....
На такое определение области компилятор у меня ругется!
Что я делаю не так?
Цитата


подключить двойной буффер очень просто: создаеш в памяти bitmap; рисуеш на нем; а потом целиком этот битмап копируеш на DC. 
 


Я конечно понимаю, что это просто но нельзя ли примерчик или где про это почитать можно? smile 


Автор: _hunter 14.8.2007, 14:09
а память кто выделять будет? -- Пушкин?
RECT obl;
и 
InvalidateRect(hWnd, &obl, TRUE);

почитать про это можно (не повериш) на этом же форуме -- достаточно поискать по этому разделу слово bitmap:
http://forum.vingrad.ru/forum/topic-112781.html

Автор: Oreshin 14.8.2007, 15:59
Большое СПАСИБО Hanter.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)