Newsgroup: it.comp.programmare.win32
Titolo: MFC e Init del Dialog

Salve a tutti!
Nella creazione di un applicazione con VisualC ed MFC mi trovo a
risolvere il seguente problema :
Com'è possibile richiamare una procedura 'immediatamente dopo' che siano
successe queste cose :
1) Il Dialog sia stato inizializzato
2) Sia ANCHE stato VISUALIZZATO
L'applicazione è di tipo Dialog.
Il problema è insomma : Esiste un evento che indica che la finestra è
stata visualizzata ??? In moda da appiccicarci un event procedure?? (Al
pari dell'evento ACTIVATE di Visual Basic...)
Grazie per l'attenzione!
Saluti a Tutti!
-- 
Posted via Mailgate.ORG Server - 
http://www.Mailgate.ORG

OnInitiDialog() è la procedura che viene eseguita subito dopo che il dialogo
è stato creato. Nella maschera del primo form dell'applicazione questo
handler l'hai di default ... nelle altre lo ottieni aggiugendo l'handler per
WM_INITDIALOG
--
       Stefano Malavasi

"Stefano Malavasi" <smal...@REMOVETHIShotmail.com> wrote in message
news:3C579C64...@REMOVETHIShotmail.com...

...per la verità il problema resta... WM_INITDIALOG intercetta 
la creazione del dialogo ma purtroppo non la sua visualizzazione...
...mi piacerebbe poter avviare una procedura immediatamente DOPO che
il Dialog è stato VISUALIZZATO e il sistema operativo ha correttamente
disegnato la finestra.
Grazie comunque per l'aiuto... purtroppo rimane questo problema... 


 disegnato la finestra.
io  suo tempo avevo risolto un problema analogo in maniera un po' naif, ma
che ha funzionato. chiamavo la finestra con una domodal e nella oninitdialog
settavo un timer con pochi millisecondi e lo facevo partire (500 ms se non
ricordo male), a quel punto alla classe della dialog aggiungevo il gestore
di WM_TIMER (funzione ontimer), in questo per prima cosa richiamavo la
killtimer (altrimenti ogni 500 ms veniva richiamata, il timer se non glielo
dici tu non si ferma) e poi gli facevo fare quello che volevo facesse. in
questo modo l'esecuzione dei comandi nella ontimer veniva eseguita dopo che
la finestra era stata visualizzata.
ciao
Roberto

 [CUT]
Orrore!!! 
-- 
Luc.

"Pietro Cannavaro" ha scritto
: ...mi piacerebbe poter avviare una procedura immediatamente DOPO che
: il Dialog è stato VISUALIZZATO e il sistema operativo ha correttamente
: disegnato la finestra.
:
Nell' OnInitDialog prova a chiamare:
ShowWindow( SW_SHOWNORMAL );
UpdateWindow( );
dopo di che avvii la tua procedura.
ciao
Massimo

 Massimo
...purtroppo questa soluzione non č applicabile. E' un applicazione
di tipo Dialog e nessuno richiama ShowWindow... il primo form
č un Dialogo modale...
Grazie ma ... ...la ricerca della soluzione continua... 


"Pietro Cannavaro" ha scritto
:
: ...purtroppo questa soluzione non è applicabile. E' un applicazione
: di tipo Dialog e nessuno richiama ShowWindow... il primo form
: è un Dialogo modale...
:
: Grazie ma ... ...la ricerca della soluzione continua...
Ti sto dicendo che devi chiamare tu ShowWindow all'interno
del metodo OnInitDialog della tua classe derivata da CDialog,
seguita da una chiamata a UpdateWindow (che devi fare sempre tu).
Quando quest'ultima ritorna la Dialog e` visualizzata (ed
inizializzata se hai avuto cura di inizializzarla) quindi
puoi eseguire la 'procedura' che ti interessa.
ciao
Massimo

Prova con OnDraw() č la procedura che si preoccupa del disegno dei
controlli ...
--
       Stefano Malavasi



già...
non era meglio intercettare il primo WM_PAINT ?
-- 
ciao :: xaero
Data is not information, and information is not knowledge: knowledge
is not understanding, and understanding is not wisdom. (Philip Adams)

Grazie!
Sono riuscito a risolvere la questione combinando due suggerimenti.
1) Intercettare WM_PAINT
2) Far richiamare regolarmente la Paint di default.
3) Richiamare UpdateWindow() (Necessario!)
4) Richiamare la mia procedura.
Grazie per l'aiuto!
