Newsgroup: it.comp.programmare.win32
Titolo: [VC] dialog in attesa inutile

Ho una dialog contenente una progress bar ed un pulsante.
La progress viene incrementata da una funzione richiamata all'interno
della BOOL CALLBACK della dialog.
Il problema è questo, se non clicco sul pulsante la funzione che deve
aggiornare la progress bar non parte. Io vorrei eliminare il pulsante
e fare in modo che parta automaticamente la funzione che incrementa la
barra.
Penso che la dialog aspetti un evento esterno prima di "partire", io
vorrei che facesse tutto da sola!
Spero di essermi spiegato e mi scuso se ho detto delle ca..... ma sono
alle prime armi.
Vi propongo quanto sono riuscito a scrivere:
BOOL CALLBACK BarraDlgProc (HWND hDlg, UINT iMsg, WPARAM wParam,
LPARAM lParam)
{ 
 
    HWND hProgress;
	hProgress = GetDlgItem(hDlg,IDC_PROGRESS);
	int w=g_pimg_Thinning->GetWidth();
     switch (iMsg)
	{ 
          case WM_INITDIALOG:
 
			SendMessage(hProgress, PBM_SETRANGE, 0,
                                     MAKELPARAM(0, w)); 
 
 
			return TRUE; 
 
 
		case WM_COMMAND: 
 
			{ 
				//case IDOK:
 
					//Richiamo la funzione mer
					g_pimg_mer = Mer((CImageGray
*)g_pimg_Thinning,hProgress);
					EndDialog(hDlg,wParam);
            } 
 
 
    } 
 
    return FALSE; 
} 
Grazie a quanti risponderanno.
Ciao

ma non capisco una cosa; comunque sia la progress bar inizierà ad
aumentare in seguito ad un evento; per ora l'evento è la pressione del
tasto, ma cosa ti impedisce di chiamare la funzione in un altro momento
che ti pare a te?
se la progress bar deve partire subito appena vedi la dialog, allora dalla
CALLBACK della dialog puoi intercettare WM_CREATE oppure WM_INITDIALOG
(meglio la seconda però) e chiamare la funzione, giusto?
-- 
questo articolo e` stato inviato via web dal servizio gratuito 
http://www.newsland.it/news
 segnala gli abusi ad 
ab...@newsland.it

(meglio la seconda però) e chiamare la funzione, giusto?
Se richiamo la funzione che aggiornerà la progress dentro a  "case
WM_INITDIALOG:"  e ci aggiungo "EndDialog(hDlg,wParam);" per chiudere
tutto alla fine, non mi visualizza la dialog!
Ho provato tutte le combinazioni, richiamarla dentro e fuori dai case,
ma non ho risolto. La mia idea è quella di provare a generare l'evento
di click sul tasto da dentro alla CALLBACK...il problema è che non so
come e se si può fare.
E' una soluzione orrenda, ma non ho altre idee...spero nel vostro
aiuto.
Grazie comunque per la risposta.
Ciao

Non ho capito bene il problema, ma volevo dirti di provare ad utilizzare
un'altro thread per eseguire i calcoli ed aggiornare la progress bar. Nei
dialog in cui io l'ho utilizzata (la progress bar), la finestra mi sembrava
"incantata" se facevo tutto nello stesso thread, anche se il programma
funzionava. Ho risolto con un secondo thread.

Non ho capito bene il problema
Vorrei avere una dialog contenente solamente una progress bar.
Questa progress bar dovrebbe essere fatta avanzare da una funzione che
richiamo dentro alla CALLBACK (passandogli l'handle della progress
bar). Quello che mi succede č che la dialog (e di conseguenza la
progress bar) rimangono li in attesa di un evento...e si blocca tutto
il programma!
L'idea era quella di visualizzare lo stato di avanzamento del
programma con una progress bar, niente di piů..
Comunque grazie per il consiglio.
Ciao

Ho una dialog contenente una progress bar ed un pulsante.
Confesso che non ci ho capito molto , comunque il modo corretto per
gestire una progressbar da una winproc e questa :
 LRESULT CALLBACK WndProc (HWND hwnd, UINT iMsg, WPARAM wParam, LPARAM
lParam)
{
 LRESULT val ;
 switch (iMsg)
        {
        case WM_CREATE :
        hPB = CreateWindowEx(
                 WS_EX_CLIENTEDGE|WS_EX_STATICEDGE,
                 PROGRESS_CLASS,
                 "",
                 WS_CHILD | WS_VISIBLE,//|PBS_SMOOTH, //|PBS_VERTICAL
,
                 0,10,300,20,
                 hwnd,
                 (HMENU)1,
                 HInstance,
                 NULL) ;
// Set the range for the progress bar.
        SendMessage (hPB,PBM_SETRANGE,0L,MAKELPARAM(0,100));
// Set the step.
        SendMessage (hPB,PBM_SETSTEP,10,0L);
        return 0 ;
        case WM_TIMER:
        if (uCurrent < uMax) {
           // Increment (step) the progress bar.
           val = SendMessage (hPB, PBM_STEPIT, 0L, 0L);
           uCurrent++;
           }
        else {
           // We are at the end of the range - kill the timer.
           KillTimer (hwnd, ID_TIMER);
           uCurrent = 0;
           }
        return 0 ;
        case WM_RBUTTONDOWN :
        // Stop the progress bar.
        SendMessage (hPB, PBM_SETPOS, 0L, 0L);
        KillTimer (hwnd, ID_TIMER);
        return 0 ;
        case WM_LBUTTONDOWN :
        uCurrent = uMin;
        SetTimer (hwnd, ID_TIMER, 500, NULL);
        return 0 ;
        case WM_DESTROY :
        PostQuitMessage (0) ;
        return 0 ;
       }
 return DefWindowProc (hwnd, iMsg, wParam, lParam) ;
}
poi da una dialog , credo che piu o meno sia la stessa cosa