daemon-6.66 (Ex-Member)
Rookie
Messaggi: 24
Iscritto: 11/06/2008
|
Salve ragazzi,
non sapevo se pubblicarlo qui o nella sezione Windows, ma il titolo dice tutto.
Qualcuno mi può spiegare a che servono queste 2 funzioni?
Non mi rimandate su MSDN grazie!
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Le due API aggiungono (invalidate) e rimuovono (validate) una area indicata di una finestra dall'elenco delle aree da ridisegnare.
|
|
daemon-6.66 (Ex-Member)
Rookie
Messaggi: 24
Iscritto: 11/06/2008
|
Postato originariamente da theprogrammer:
Le due API aggiungono (invalidate) e rimuovono (validate) una area indicata di una finestra dall'elenco delle aree da ridisegnare. |
Una descrizione più esauriente? |
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Non c'e' molto in piu' da dire ... Cosa non ti e' chiaro?
Ultima modifica effettuata da theprogrammer il 18/09/2009 alle 19:34 |
|
daemon-6.66 (Ex-Member)
Rookie
Messaggi: 24
Iscritto: 11/06/2008
|
Mi confondono queste 2 funzioni:
se ho capito bene InvalidateRect crea all'interno della Client Area un area rettangolare che deve essere ridisegnata quando si chiama BeginPaint, mentre poi che fine fa il resto della Client Area?
Opposto a InvalidateRect;
ValidateRect invece dovrebbe fare in modo di non aggiornare un area della Client Area?
Allora lavorano in questo modo o mi sto confondendo un sacco?
queste funzioni posso chiamarle solo nel WM_PAINT?
Aiutami please!
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da daemon-6.66:
Mi confondono queste 2 funzioni:
se ho capito bene InvalidateRect crea all'interno della Client Area un area rettangolare che deve essere ridisegnata quando si chiama BeginPaint, mentre poi che fine fa il resto della Client Area? |
La InvalidateRect NON crea nulla.
Come ti dicevo, AGGIUNGE una zona rettangolare della finestra ad una "lista" (per ogni finestra) in cui esistono tutte le aree che necessitano di essere ridisegnate da Windows.
Supponi di disegnare una linea nella tua client area. Per vedere la linea stessa, devi dire a Windows di ridisegnare la finestra e lo fai INVALIDANDO quella zona rettangolare.
Opposto a InvalidateRect;
ValidateRect invece dovrebbe fare in modo di non aggiornare un area della Client Area? |
Questa API si usa pochissimo ... e' il contrario della InvalidateRect ... ovvero indica che una certa area puo' non essere ridisegnata.
Supponi che sia stata disegnata la linea ma subito sia stato dato un comando UNDO per eliminare la stessa linea. Dato che il rettangolo client non e' cambiato, se avevi usato la Invalidate allora puoi usare la Validate per indicare a Windows che quell'area non deve essere ridisegnata.
Attenzione ... se il ridisegno deve essere fatto o meno, alla fine decide Windows analizzando l'insieme delle aree invalidate per ogni finestra in ogni determinato momento.
queste funzioni posso chiamarle solo nel WM_PAINT? |
No ... anzi, non devono essere richiamate quando si gestisce il WM_PAINT.
Non capisco perche' il problema e' su queste due API (essenzialmente la Invalidate che si usa molto di piu').
Hai un programma che non funziona ? Posta il codice che e' meglio ... Ultima modifica effettuata da theprogrammer il 19/09/2009 alle 9:32 |
|
daemon-6.66 (Ex-Member)
Rookie
Messaggi: 24
Iscritto: 11/06/2008
|
potresti farmi un esempio completo con del codice con qualche commento?
Mi basta anche la Window Procedure solo
Giusto per capirci meglio
grazie ciao
|
|
theprogrammer (Normal User)
Guru^2
Messaggi: 2509
Iscritto: 28/01/2009
|
Postato originariamente da daemon-6.66:
potresti farmi un esempio completo con del codice con qualche commento?
Mi basta anche la Window Procedure solo
Giusto per capirci meglio
grazie ciao |
Non posso perche' la InvalidateRect si usa ovunque nel programma quando modifichi parte dell'interfaccia utente.
Ma scusa, perche' non proponi del codice che non ti funziona invece di continuare con queste richieste sulla InvalidateRect? |
|
daemon-6.66 (Ex-Member)
Rookie
Messaggi: 24
Iscritto: 11/06/2008
|
non ho del codice attualmente, era solo perchè stavo studiando un manuale ma non riuscivo a capire come usarle e cosa facevano...
|
|