OnPaint si OnDraw

Intrebari legate de programarea cu biblioteci precum MFC, ATL, WTL si GDI+.
bytefield
Junior
Junior
Posts: 35
Joined: 20 Jun 2008, 19:55
Location: Alba Iulia
Contact:

Re: OnPaint si OnDraw

Post by bytefield » 17 Dec 2008, 12:22

Silviu Ardelean wrote:
pifcnt wrote:Da realizez ca sunt cu ani intarziere...dar poate se mai uita cineva pe forumul acesta.
Scuza-ma, as dorii sa ma luminezi si pe mine ce ai vrut sa zici cu ani intarziere...
Multumesc, anticipat.
Uita-te la data ultimului post scris de Zeros ;)
by Zeros on 03 Nov 2007, 10:57
Cred ca la asta facea referire pifcnt.



User avatar
Silviu Ardelean
Senior
Senior
Posts: 1175
Joined: 12 Jul 2007, 09:22
Judet: Timiş
Location: Timisoara
Contact:

Re: OnPaint si OnDraw

Post by Silviu Ardelean » 17 Dec 2008, 12:43

bytefield wrote:
Silviu Ardelean wrote:
pifcnt wrote:Da realizez ca sunt cu ani intarziere...dar poate se mai uita cineva pe forumul acesta.
Scuza-ma, as dorii sa ma luminezi si pe mine ce ai vrut sa zici cu ani intarziere...
Multumesc, anticipat.
Uita-te la data ultimului post scris de Zeros ;)
by Zeros on 03 Nov 2007, 10:57
Cred ca la asta facea referire pifcnt.
Sper ca intr-adevar, acesta sa fie referirea lui pifcnt. Ideea e ca in ultima vreme am vazut, aici pe forum, mai multe persoane care anuntau "anihilarea" C++-ului in detrimentul .Net-ului sau altei tehnologii si ma gandeam ca, si el s-ar numara printre acestea.

User avatar
Ovidiu Cucu
Fondator
Fondator
Posts: 3778
Joined: 11 Jul 2007, 16:10
Judet: Iaşi
Location: Iasi
Contact:

Re: OnPaint si OnDraw

Post by Ovidiu Cucu » 17 Dec 2008, 17:27

pifcnt wrote:[...]poate se mai uita cineva pe forumul acesta.
Poti fi sigur ca da. ;)
pifcnt wrote:Diferentza intre OnPaint si OnDraw este ca in OnPaint poti sa apelezi legal GetUpdateRgn...
Cred ca mai corect e sa spui "una dintre diferente". Una-i functie virtuala cealalta nu, una are-un parametru ailalta nu etc etc.
Si intre cal si magar sunt mai multe diferente decat lungimea urechilor. :)
pifcnt wrote:...sau GetUpdateRect(mai degraba) pentru a obtine regiunea/rectangle-ul care trebuie redesenat.In OnDraw acest lucru nu mai este posibil, asta pentru ca MFC-ul apeleaza constructorul lui CPaintDC care face BeginPaint, care face indisponibila informatia data de GetUpdateRect.

Asa, ca o observatie, implementarea din CView::OnPaint() Nu prea e corecta pentru ca
la http://msdn.microsoft.com/en-us/library ... S.85).aspx
se spune:
A window may receive internal paint messages as a result of calling RedrawWindow with the RDW_INTERNALPAINT flag set. In this case, the window may not have an update region. An application should call the GetUpdateRect function to determine whether the window has an update region. If GetUpdateRect returns zero, the application should not call the BeginPaint and EndPaint functions.
Dupa cum se vede si din sample-ul dat intr-un post anterior, mfc-ul nici macar nu se deranjeaza sa apeleze GetUpdateRect, ce sa mai vorbim de verificat ce intoarce...
Bine,... MFC-ul (ca si alte bibliotecti) "nu se deranjeaza" cu anumite chestii dar lasa destule portite "spre mai bine". Cred ca nu mai trebuie de aratat (dar... cum spuneai: poate se mai uita cineva pe forumul acesta :)) cum oricine poate trata mesajul WM_PAINT si sa puna in handlerul aferent (sa-i zicem OnPaint) tot ce vrea muschii sai ca sa scape de frustrari, dureri de cap si despicat firul in patru.
Chiar daca, legal sau nu si cel putin la prima vedere, nu se intampla nimic catastrofal dupa scenariul pe pare l-ai citat mai sus.

Oricum, mersi pentru completare! Desi... ai cam scos un topic de la naftalina. ;)

Stime,

Post Reply