Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [C++]Win32: rendere effettive in tempo reale le modifiche grafiche a una finestra

    Salve sto progettando un programma di carte (il famoso Klondike con risolutore automatico).
    Vi spiego subito il mio problema con il codice:
    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.

  2. #2
    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.
    Amaro C++, il gusto pieno dell'undefined behavior.

  3. #3
    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..

  4. #4
    Grazie mille, avevi ragione.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.