PDA

View Full Version : [Visual C++] WM_PAINT e OnPaint


swarm
12-02-2006, 11:00
Salve a tutti

mi trovo a dover risolvere un problemino, e come al solito chiedo aiuto a voi (e se nn fosse per voi....)

In pratica, il mio programma disegna un grafico su una parte dello schermo, e aggiorna l'area plot indefinitamnete ficnhè nn fornisco il comando stop.

Quello che voglio è che la finestra così com'è dopo lo stop (con dati e grafico "freezati") nn venga più ridipinta, cioè nn si cancelli quando windows genera il messaggio WM_PAINT.

Avevo parzialmente risolto il probl inserendo nella funzione OnPaint la chiamata a OnInitDialog, dove avevo inserito il codice che inizializzava la finestra, ma ora nn voglio che venga reinizializzata la finestra...

come posso fare?

Vedo che OnPaint dichiara di default in oggetto CClientDC dc(this).... nn c'è qualcosa che posso fare tramite questo, tipo salvare l'area client con tutti i disegni e ridisegnarla com'è ogni volta che viene causato WM_PAINT...

aiutatemi!!

kk3z
12-02-2006, 11:14
SaveDC() (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_3exv.asp) e RestoreDC() (http://msdn.microsoft.com/library/en-us/gdi/devcons_3883.asp)?

swarm
12-02-2006, 11:17
SaveDC() (http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/devcons_3exv.asp) e RestoreDC() (http://msdn.microsoft.com/library/en-us/gdi/devcons_3883.asp)?

io lo so che tu sei un mito.... ma te l'ho mai detto?

PS: nn sono gay... :D


PS2: vado a darci un'occhiata, spero di capirci al volo...

swarm
12-02-2006, 11:24
allora...

penso che ovviamente la chiamata a RestoreDC() devo metterla nella funzione OnPaint().....

sono dubbioso su dove chiamare la funzione SaveDC()...

in pratica vorrei che fosse chiamata un attimo prima che la finestra venga coperta ecc, in pratica subito prima dell'evento che mi causa la OnPaint()....

che mi suggerisci?

swarm
12-02-2006, 15:39
come prevedibil o nn va bene o (molto + probabile) nn so usarli...

supponiamo che voglia salvare lo schermo così com'è quando premo il tasto stop, e che quando si genera il messaggio WM_PAINT lo schermo torni com'era quando ho fatto click su stop...

Nella funzione OnStopButton() ho scritto:

CClientDC dc(this);

dc.SaveDC();

(ho anche provato a fare SaveDC(dc); )

poi nella funzione OnPaint() ho provato

(all'inizio viene dichiarato un oggetto CPaintDC dc(this))

1) dc.RestoreDC(-1);
2)CClientDC dlg(this);
dc.RestoreDC(-1);

come si fa???? :cry:

kk3z
13-02-2006, 11:16
Perchè RestoreDC(-1)? MSDN dice:
It can be a value returned by a previous SaveDC function call. If nSavedDC is 1, the most recently saved device context is restored.
Quindi, o salvi quello che ti ritorna savedc oppure usi 1 :)

swarm
13-02-2006, 11:18
Perchè RestoreDC(-1)? MSDN dice:

Quindi, o salvi quello che ti ritorna savedc oppure usi 1 :)

io avevo letto -1......

ora cmq sonoalle prese cn un probl + grave :cry:

ho appena aperto una discussione...