PDA

Visualizza la versione completa : [C] Individuare la fine del ridimensionamento di una finestra


Habanero
01-08-2007, 15:11
Spero che il titolo sia sufficientemente chiaro.

Creo e gestisco una finestra attraverso le API win32. Il contenuto della finestra necessita di notevoli quantità di calcoli per essere visualizzato. Una funzione apposita esegue unicamente i calcoli. Nella gestione del messaggio WM_PAINT gestisco invece la sola visualizzazione dei dati precedentemente calcolati.

Quando la finestra viene ridimensionata è necessario richiamare la funzione di calcolo per aggiornare i dati. Avevo pensato di richiamare tale funzione nella gestione di WM_SIZE. Tutto funziona correttamente ma la cosa non è molto comoda. WM_SIZE viene infatti inviato per ogni spostamento del mouse durante il drag del bordo finestra e ciò provoca una invocazione a ripetizione della pesante funzione di calcolo. A me servirebbe poter rilevare la fine del ridimensionamento, ovvero l'istante in cui l'utente rilascia il tasto del mouse, in modo da richiamare la funzione una sola volta.

Qualche idea?

Xaratroom
01-08-2007, 18:40
Non conosco bene le api cmq, puoi provare a richiamare la funzione ogni volta che il tasto del mouse viene rilasciato, controllando, con un'apposita variabile di controllo, se l'utente ha ridimensionato la finestra...

ES:
bool controllo; //globale
//...
Evento ridimensiona
{
controllo = true
}

Evento rilascio tasto mouse
{
if (controllo)
funzione ();
controllo = false;
}

Habanero
01-08-2007, 19:52
Ho trovato la soluzione basandomi sui messaggi WM_ENTERSIZEMOVE e WM_EXITSIZEMOVE. Ora non ho tempo ma per chi fosse interessato domani posto la soluzione completa.

Loading