PDA

View Full Version : ON_WM_CLOSE message non gestito


misturas
23-01-2004, 07:11
Ciao @ tutti,
sto sviluppando un prog MDI con Visual C++ 6
Nella vista di uno dei documenti,ho aggiunto tramite classwizard il codice necessario per gestire il messaggio "ON_WM_CLOSE"
Il codice del metodo è così:

CMyFormView::OnClose()
{
//Fai qualcosa...
// e qualcos'altro

// Chiama il metodo del genitore
CFormView::OnClose();
}

Il problema è che quando chiudo la finestra questo codice non viene eseguito,in quanto inserendo un break. non entro mai in questo metodo
Usando Spy++ ho visto che quando chiudo la finestra un messaggio ON_WM_CLOSE viene effettivamente inviato,anche se non so con certezza da quale thread viene gestito

Please help me!
:muro: :muro:

lombardp
23-01-2004, 07:34
Intercettalo nella PreTranslateMessage.

verloc
23-01-2004, 09:23
La gestione delle chiusure nelle applicazioni mdi è diversa rispetto
ad una sdi.Per default windows minimizza le child forms ma non le chiude.
Quello che devi fare è liberare la memoria della form e ricrearla a runtime(è quello che io faccio con il Cbuilder)
Devi scartabellare sulla guida del tuo compilatore nella sezione dedicata alle applicazioni mdi.


Probabilmente quando tenti di chiudere,lancia il messaggio di minimizzazione della form.

ciao ;)

verloc
23-01-2004, 09:39
No,mi ricordavo malissimo:
è la vcl che per default minimizza(perchè window non permette di nascondere le child).

Dovresti secondo me intercettare il messaggio WM_MDIDESTROY

...
WM_MDIDESTROY

wParam = (WPARAM) (HWND) hwndChild; // handle of child to close
lParam = 0; // not used; must be zero


An application sends the WM_MDIDESTROY message to a multiple document interface (MDI) client window to close an MDI child window.

...


so quello che vuoi fare:
non c'è un evento onqueryclose()?
(tu vuoi chiudere solo a certe tue condizioni,non è vero? :) )

misturas
23-01-2004, 10:12
Grazie Verloc,
cmq il problema è molto più sempolice

L'utente chiude il documento quando vuole,ma alla chiusura del
file controllo se esso ha aggiunto degli elementi a delle combo box
Questi elementi non vengono serializzati nel file stesso ma in un
file a parte,in modo che siano accessibili da tutti i documenti
del tipo in questione

Vorrei realizzare una cosa tipo la richiesta di salvataggio del documento che il framework chiede se il flag di documento modificato è true(Quello che setti con CDocument:: SetModifiedFlag)ma distinta da questa

Posso fare l'override di CDocument:: OnClose,ma mi secca non capire perchè non funziona come dovrebbe l'OnClose della vista

:muro: :muro:

Spero di essere stato spiegato!
Grazie!