Newsgroup: it.comp.programmare.win32
Titolo: primo problema idiota...wow

l'altro giorno avevo detto che finalmente avevo iniziato a capire la
programmazione windows...e ora mi presento con un problema
stupidissimo...non ammazzatemi:D
volevo provare a scrivere un semplice plugin per winamp...che mi
visualizzasse un dialogo NON MODALE dove ci sta un controllo static che mi
visualizza costantemente i secondi della traccia che sono stati mandati in
play(una specie di cronometro)
questo lo posso fare tramite un
SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETOUTPUTTIME)
che winamp riesce a interpretare restituendomi appunto un intero contenente
i  millisecondi suonati....ma questo riesco a farlo funzionare
tranquillamente...il problema sta nell'aggiornare costantemente la finestra
del dialogo!non so come fare....io ho provato così nella PROCEDURA DEL
DIALOGO
....
case WM_INITDIALOG:
   UpdateWindow(hwndDlg);break;
  case WM_PAINT:
   {   char time[3600]; /* un ora per traccia basta...*/
    int tempo=SendMessage(plugin.hwndParent,WM_WA_IPC,0,IPC_GETOUTPUTTIME);
    wsprintf(time,"%d",tempo);
    SetDlgItemText(hwndDlg,IDC_STATIC1,time/1000);
    UpdateWindow(hwndDlg);
} break;
così secondo la mia testa bacata...appena il dialogo si inizializza...lo
mando in update con UpdateWindow (e dovrebbe mandare un messaggio WM_PAINT
sempre alla procedura del dialogo se ho capito bene...) entrando cosi in una
specie di ciclo dei messaggi che ogni volta richiamasse WM_PAINT e
aggiornasse il controllo...
ma a quanto pare la mia ignoranza mi ha fatto capire male...perchè sto
controllo non si aggiorna proprio!
il codice funziona perchè se metto un button e richiamo queste funzioni da
là....lo static viene aggiornato tranquillamente ogni volta che premo il
bottone...quindi il problema sta proprio nell'aggiornamento o nei messaggi
che arrivano che nn so usare:P
come si dovrebbe fare in questi casi?perdonate la mia asinità....ho tentato
di vedere 1 pò msdn ma non ne vengo a capo...

facendo una prova ho visto che se copro il dialogo con qualcosa e lo
riscopro....lo static si aggiorna...quindi ciň vuol dire che UpdateWindow
non manda il messaggio WM_PAINT...si vede che secondo lui non č
necessario...un modo per forzarlo c'č?se ho aggiunto un altra castronata
perdonatemi ancora di +!

 del dialogo!
SetTimer ;-)

alla fine ho fatto cosi...solo che a ogni colpo di timer cambiavo il testo
static....aggiornando tutto il dialog faceva lo stesso?

 static....aggiornando tutto il dialog faceva lo stesso?
non è il modo piu raffinato ma il risultato è lo stesso ;-)

, è una spamtrap
Usate zello <at> despammed <dot> com

 perdonatemi ancora di +!
E invece questa è una delle cose più sensate che hai detto ^_^
il modo per "forzarlo" è l'API InvalidateRect (mi sembra che si chiamasse
così) e serve per dire a Windows che una determinata area rettangolare
della finestra in questione non è più valida e deve essere ridisegnata;
così windows invia il WM_PAINT (mi sembra che se al parametro del
rettangolo passi NULL, significa che il messaggio WM_PAINT riguarda
*tutta* la finestra).
Tuttavia quello in cui sbagli è settare il testo della static in un
messaggio WM_PAINT, perché per le static non c'è bisogno di intercettare
WM_PAINT (si aggiornano da sole); quello che devi fare invece (come ti
hanno già detto altri) è settare un timer (50 millisecondi dovrebbe andar
bene) e aggiornare il testo della static rispondendo al WM_TIMER.
Cmq da niubbi è normale commettere errori, sicuramente ne avrò fatti
anch'io di grossolani; poi con l'esperienza s'impara. ;-)
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it