Armenian Knowledge Base  

Go Back   Armenian Knowledge Base > Technical sections > Languages, Compilers, Interpreters
Register

Reply
 
LinkBack Thread Tools
Old 17.04.2002, 15:30   #1
Главный инспектор снов
 
Dream_InspectoR's Avatar
 
Join Date: 01 2002
Location: Yerevan, Armenia
Posts: 330
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Question Kak pererisowywat' chast' okna w VC++

Predpolozhim u menja est' dialog, na kotorom setka nxn (n w kwadrate elementow) prichem w kazhdom elemente stoit bitmap (BitBlt i wse takoe) kazhdyj raz w OnPaint pererisowywat' wse n*n elementow nespodruchno (nabljudaetsja "trtroc").
Wopros
Mozhet kto znaet kak uznar' kakja chast' okna byla poterjana ( w rezul'tate perekrywanija, ili uxoda uz widimoj oblasti desktopa) chtob pererisowywat' tol'ko etu chast'?
__________________
Kill'em!!! Kill'em all!!!
Reply With Quote
Old 17.04.2002, 19:53   #2
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Post

look at
CWnd::GetUpdateRect

(...Retrieves the coordinates of the smallest rectangle that completely encloses the update region....)
Reply With Quote
Old 17.04.2002, 20:01   #3
Академик
 
greka's Avatar
 
Join Date: 09 2001
Location: inside myself
Posts: 5,369
Downloads: 0
Uploads: 0
Reputation: 18 | 5
Post

also search "DrawMeOffScreen" in the MSDN and read apropriate article - it will be useful.

b/r
Reply With Quote
Old 18.04.2002, 13:48   #4
Дошкольник
 
Join Date: 03 2002
Location: ARMENIA,Yerevan
Age: 39
Posts: 141
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Arrow

в Win32 API есть такая функция:
InvlidateRect(HWND hWnd,CONST RECT *lpRect,BOOL bErase);
она посылает сообщение WM_PAINT окну дескриптор у которого hWnd и перерисовывает часть окна отмечаной структурой *lpRect (указатель на структуру типа RECT). Параметр bErase указывает перерисовать или нет бэкграунд окна в данном обновленном регионе.
Reply With Quote
Old 19.04.2002, 01:53   #5
Главный инспектор снов
 
Dream_InspectoR's Avatar
 
Join Date: 01 2002
Location: Yerevan, Armenia
Posts: 330
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Post

2 Greco El
10x for assistance, GetUpadateRect is that what were I looking for.
2 Lion King
Duq sxal eq haskacel harc@. harc@ ajn er, te Ajd invalidaterect-in ich amenapoqr koordinat kareli e poxancel wor lriv pagi korats region@.
Reply With Quote
Old 19.04.2002, 08:26   #6
Дошкольник
 
Join Date: 03 2002
Location: ARMENIA,Yerevan
Age: 39
Posts: 141
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Talking

Quote:
Originally posted by Dream_InspectoR:

2 Lion King
Duq sxal eq haskacel harc@...
н-да... бывает...
Reply With Quote
Old 23.04.2002, 06:18   #7
Дошкольник
 
Join Date: 03 2002
Location: Yerevan
Posts: 111
Downloads: 0
Uploads: 0
Reputation: 0 | 0
Post

А вообще, техника перерисовывани без "моргания" в MSDN-е неплохо охвачена, при поиске на слово "flicker" дает немало ресурсов.

Кстати, если же в сетке дочерние окошки сидят, то очень помогате WS_CLIPCHILDREN, а если вся перерисовка родная - и если вышеуказанные советы не помогают (зависит от конкретной ситуации, немного не совсем ясно, в чем именно у тебя проблема), поскольку в общем, моргать не должно, даже если ты перерисовываешь все - ОnPaint() овский DC уже и так клипнутый. А если моргает, значит может ты рисуешь в другой DC, отдельно полученный, то есть если сменишь его на BeginPaint-овский, все пройдет.

Еще есть вариант, что даже если ты все сделаешь правильно, то тебя может раздражать моргание даже той частично перерисовываемой области, это тоже решаемо - можно просто рисовать в memory DC, используя его как кэш, а потом битблитом кидать в нужное место.
Reply With Quote
Sponsored Links
Reply

Thread Tools


На правах рекламы:
реклама

All times are GMT. The time now is 01:55.


Powered by vBulletin® Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.