PDA

Visualizza la versione completa : [C++] Esecuzione di una funzione al caricamento di un Form


MRj92
09-08-2007, 09:22
lo so che il titolo è un po' strano ma non sapevo come metterlo, corregetelo voi moderatori per cortesia.
In ogni caso ecco la mia situazione: ho una finestra in cui c'è un menu in alto e un'edit al centro.
Io devo, a form visibile e caricato, iniziare una procedura. Ho provato a metterla dopo la ShowWindow() ma niente. Ho provato a associarlo al comando WM_CREATE ma niente. In tutti i cai esegue la procedura Prima di mostrare il form, o meglio, mostra il form solo a procedura finita. Mi servirebbe tipo un comando WM_CREATED... :D ...
Fatemi sapere! :ciauz: :ciauz:

andbin
09-08-2007, 09:57
Originariamente inviato da MRj92
lo so che il titolo è un po' strano ma non sapevo come metterlo, corregetelo voi moderatori per cortesia.
In ogni caso ecco la mia situazione: ho una finestra in cui c'è un menu in alto e un'edit al centro.
Io devo, a form visibile e caricato, iniziare una procedura. Ho provato a metterla dopo la ShowWindow() ma niente. Ho provato a associarlo al comando WM_CREATE ma niente. In tutti i cai esegue la procedura Prima di mostrare il form, o meglio, mostra il form solo a procedura finita. Mi servirebbe tipo un comando WM_CREATED... :D ...
Fatemi sapere! :ciauz: :ciauz: Quindi vuoi fare "qualcosa" solo appena dopo che la finestra è stata resa visibile.

WM_CREATE non va bene, la documentazione dice: "... receives this message after the window is created, but before the window becomes visible.". Quindi prima che la finestra diventi visibile.

Potrebbe esserti utile WM_WINDOWPOSCHANGED, però leggi bene la documentazione.

MRj92
09-08-2007, 11:05
scusa l'ignIoranza ... :D ...ma quel messaggio non viene inviato quando la finestra cambia posizione? :confused: a me servirebbe tipo un mex di "avvenuta creazione". Oppure potrei anche fare un ciclo che verifica se è stata creata e manda un messaggio. Però mi sembra strano che non ci sia niente di pronto. :dhò:
grazie andbin per la risposta... :smack: :D :D scherzo!

andbin
09-08-2007, 11:14
Originariamente inviato da MRj92
ma quel messaggio non viene inviato quando la finestra cambia posizione? :confused: a me servirebbe tipo un mex di "avvenuta creazione". Oppure potrei anche fare un ciclo che verifica se è stata creata e manda un messaggio. Però mi sembra strano che non ci sia niente di pronto. :dhò:La "avvenuta creazione" è appunto WM_CREATE, l'ho anche riportato "..after the window is created..".

WM_WINDOWPOSCHANGED invece viene inviato ogni volta che la finestra cambia di stato: posizione, dimensiione, z-order, visibile/invisibile, ecc.... Ma appunto dal nome "changed", avviene dopo che lo stato è stato modificato.
Basterebbe tenere un flag per fare quello che vuoi solo 1 volta a seguito di questo messaggio.

Domanda: che cosa deve fare di preciso la tua procedura?

MRj92
09-08-2007, 11:26
capito! :mame: proverò perchè ora non posso e ti farò sapere.
Comunque questa applicazione è una specie di loader per l'avvio di win che avvia i programmi p2p solo se sono presenti download in corso. L'editbox è solo per una funzione di LOG. capito? :fighet:

MRj92
09-08-2007, 14:45
funziona ma esegue la funzione ogni valta k la finestra viene minimizzata e cose varie... devo togliere la possibilità di spostamento e di minimizzare la finestra.

andbin
09-08-2007, 15:02
Originariamente inviato da MRj92
funziona ma esegue la funzione ogni valta k la finestra viene minimizzata e cose varie... devo togliere la possibilità di spostamento e di minimizzare la finestra. Devi usare un flag per evitare che lo faccia ogni volta.

Comunque quello che volevo capire io è quali operazioni devi fare praticamente come codice. Voglio cioè capire se ti serve davvero che la finestra sia già visibile oppure no.

MRj92
09-08-2007, 15:07
ma scusa, non dovrei "estrarre" dalla struttura LParam il menbro flags per vedere qual'è l'azione eseguita dalla finestra? cioè se è spostamento, ridimensionamento?
Piccola domanda un po' OT: si può associare un .rc a una finestra come lo si fa con i dialoghi?
Comunque si, mi serve la finestra già visibile. :dhò: :dhò:

andbin
09-08-2007, 15:27
Originariamente inviato da MRj92
ma scusa, non dovrei "estrarre" dalla struttura LParam il menbro flags per vedere qual'è l'azione eseguita dalla finestra? cioè se è spostamento, ridimensionamento?Sì, certo. Diciamo che dovrebbe essere: "la prima volta che ricevi WM_WINDOWPOSCHANGED con WINDOWPOS.flags che contiene SWP_SHOWWINDOW".


Originariamente inviato da MRj92
Piccola domanda un po' OT: si può associare un .rc a una finestra come lo si fa con i dialoghi?No. Perché le finestre "crude" le crei da codice con CreateWindow.
Le dialog sono un qualcosa di più, c'è tutta una gestione "sotto" il cofano delle dialog.


Originariamente inviato da MRj92
Comunque si, mi serve la finestra già visibile. :dhò: :dhò: Continuo a non capire il perché .... sono curioso eh!

MRj92
09-08-2007, 16:29
Citazione:
Originariamente inviato da MRj92
ma scusa, non dovrei "estrarre" dalla struttura LParam il menbro flags per vedere qual'è l'azione eseguita dalla finestra? cioè se è spostamento, ridimensionamento?
Sì, certo. Diciamo che dovrebbe essere: "la prima volta che ricevi WM_WINDOWPOSCHANGED con WINDOWPOS.flags che contiene SWP_SHOWWINDOW".

Io ho provato così:

...
case WM_WINDOWPOSCHANGED:
if(lParam.flags == SWP_SHOWWINDOW)
faiqualcosa();
break;
...


ma:
In function `LRESULT WndProc(HWND__*, UINT, WPARAM, LPARAM)':
`flags' has not been declared
request for member of non-aggregate type before '==' token

Come si fa??


Originariamente inviato da MRj92
Comunque si, mi serve la finestra già visibile.
Continuo a non capire il perché .... sono curioso eh!

è una questione grafica, per vedere l'esecuzione dei comandi!

Loading