PDA

Visualizza la versione completa : [C++] Rendere effettive in tempo reale le modifiche grafiche a una finestra


ardito86
22-02-2012, 01:30
Salve sto progettando un programma di carte (il famoso Klondike con risolutore automatico).
Vi spiego subito il mio problema con il codice:


while(inter.mossa()){
Sleep(300);
RedrawWindow(win.getHWND(),NULL,NULL,RDW_UPDATENOW );
}


inter.mossa() è una funzione che restituisce true fintantoché il computer è in grado di eseguire delle mosse. Questa funzione se restituisce true modifica il "tavolo", ovvero l'organizzazione delle carte nel tavolo.

L'intento mio era di vedere queste mosse in tempo reale (ecco il perché del ritardo Sleep), quindi aggiornando di volta in volta il contenuto della finestra.

RedrawWindow genera il messaggio WM_PAINT che io prevedo nella funzione di callback, che si occupa di disegnare il "tavolo" e quindi mostrare la situazione attuale.

Sono sicuro che WM_PAINT viene chiamato durante il ciclo, perché se minimizzo la finestra e ingrandisco, vedo che il contenuto del tavolo cambia. Ma se la finestra rimane attiva non avviene alcun cambiamento.

C'è qualche funzione per fare ciò? Mi viene da pensare che l'HDC della finestra cambi, ma ci vuole ancora qualche funzione che aggiorni la finestra con il proprio HDC.

MItaly
22-02-2012, 02:38
Devi usare la InvalidateRect, altrimenti non viene marcata alcuna area come "da ridisegnare", per cui anche se arriva il WM_PAINT l'output viene clippato.

ardito86
22-02-2012, 02:55
Originariamente inviato da MItaly
Devi usare la InvalidateRect, altrimenti non viene marcata alcuna area come "da ridisegnare", per cui anche se arriva il WM_PAINT l'output viene clippato.
Ok, la provo.
Volevo utilizzarla, ma da quanto leggo su msdn e in vari siti, la funzione RedrawWindow già lo fa, a differenza di UpdateWindow. Provo..

ardito86
22-02-2012, 03:01
Grazie mille, avevi ragione.

Loading