PDA

View Full Version : [C]Eseguibile windows e focus


theCore
06-08-2006, 11:48
Salve a tutti.
Qualcuno sa dirmi come posso evitare che le mie applicazioni in windows con gui possano continuare a funzionare senza bisogno di avere il focus?

In pratica ho una funzione che ad ogni esecuzione aggiorna un progressbar e se non do il focus alla finestra, la pb non si aggiorna e la funzione non continua a girare :mbe:

Come faccio?
Grazie

ps: la funzione è un thread

71104
06-08-2006, 14:07
Qualcuno sa dirmi come posso evitare che le mie applicazioni in windows con gui possano continuare a funzionare senza bisogno di avere il focus? non c'è un supporto specifico da parte del SO per questa cosa, devi fare a mano: blocca il loop dei messaggi non appena ricevi WM_ACTIVATE e ricomincia a processare non appena la seguente chiamata restituisce TRUE:
PeekMessage(&msg, NULL, WM_ACTIVATE, WM_ACTIVATE, PM_REMOVE);
incluso il processing del messaggio WM_ACTIVATE appena rimosso. una piccola nota: la coda dei messaggi continuerà a crescere anche se tu non li ricevi, perciò se vuoi evitare che la finestra ti processi tutti i messaggi in sospeso appena la riattivi, e se piuttosto vuoi semplicemente scartare tutti quei messaggi, devi impostare a PM_NOREMOVE il flag della PeekMessage, e chiamare GetMessage finché non trovi un messaggio WM_ACTIVATE. poi ricominci a processare da WM_ACTIVATE incluso.

ps: la funzione è un thread che...? :huh:

theCore
06-08-2006, 15:26
Scusa mi sono espresso male :rolleyes: vorrei che l'esecuzione continuasse anche senza il focus (cioè il contrario), scusa. :D
Dicevo, non è che dipenda dal fatto che la parte principale del prog è un thread che creo ad un certo punto dell'esecuzione?

andbin
06-08-2006, 16:05
Salve a tutti.
Qualcuno sa dirmi come posso evitare che le mie applicazioni in windows con gui possano continuare a funzionare senza bisogno di avere il focus?

In pratica ho una funzione che ad ogni esecuzione aggiorna un progressbar e se non do il focus alla finestra, la pb non si aggiorna e la funzione non continua a girare :mbe: Così su due piedi, non mi sembra che sia una questione di focus o non focus. Bisognerebbe forse vedere il codice che hai scritto

ps: la funzione è un threadPresumo che tu abbia usato la funzione Win32 CreateThread per avviare un nuovo thread specificando la funzione di "partenza".
Ma la finestra con la progressbar la crei in questo nuovo thread o l'hai creata in un altro thread??? Occhio a queste cose ... c'è da fare un minimo di attenzione nel mandare messaggi alle finestre tra thread diversi!

theCore
06-08-2006, 16:30
Uhm infatti l'ho creata prima di creare il thread, quindi, in che modo dovrei mandare i messaggi? :mbe:

andbin
06-08-2006, 16:49
Uhm infatti l'ho creata prima di creare il thread, quindi, in che modo dovrei mandare i messaggi? :mbe:Beh, come ho detto bisognerebbe vedere il codice che hai scritto.
Comunque cosa fai di preciso??? Mandi un messaggio PBM_SETPOS alla progress-bar? Con cosa: SendMessage?
Se stai usando VC++ puoi usare l'utility Spy++ per tracciare i messaggi che arrivano alla progress-bar. Almeno vedi cosa arriva e se arriva. ;)

theCore
06-08-2006, 17:03
il codice è un po lunghetto e incasinato :D
cmq mando PBM_SETPOS, ho provato sia con SendMessage che con PostMessage, ma è uguale... purtroppo