2013-06-18 14 views
10

Attualmente sono un po 'confuso: sono WM_CLOSE e ::CloseWindow in qualche modo "correlati" o sono per cose completamente diverse?Qual è la relazione di CloseWindow e WM_CLOSE

I documenti per Closing Windows non menzionano affatto la funzione API CloseWindow. CloseWindow dovrebbe davvero essere chiamato "MinimizeWindow" o cosa mi manca?

+0

quando ho chiesto qui "Qual è il valore di un dialogo costante DS_RECURSE?" (http://stackoverflow.com/questions/15024372/what-is-the-value-of-a-dialog-constant-ds-recurse) --Il mio argomento è stato [chiusa]. Quindi "Qual è la relazione di CloseWindow e WM_CLOSE" deve essere [chiuso] anche :-) – kero

+0

@kero: hai chiesto il valore di una costante che non è stata documentata per fare nulla. Questa non è una domanda di programmazione pratica. Abbastanza in contrasto con questa domanda. Ecco perché il tuo era chiuso, e questo non lo è. – IInspectable

risposta

5

CloseWindow e WM_CLOSE sono completamente indipendenti. La funzione CloseWindow è mal chiamata. La sua funzione inversa, OpenWindow è ugualmente mal chiamata dato che ripristina le finestre.

Ho il sospetto che questi nomi risale una strada molto lunga in effetti, probabilmente per la versione di Windows 1 o 2. Sto ipotizzando che quello che oggi chiamiamo minimizzare e ripristinare erano, allora, chiama vicino e aperto.

Il modo normale per ridurre o ripristinare una finestra è chiamare ShowWindow passando SW_MINIMIZE o SW_RESTORE.

vi suggerisco di dimenticare tutto e CloseWindowOpenWindow.

6

CloseWindow è una funzione WinAPI insolitamente infelicemente chiamato. In realtà non chiude una finestra, la minimizza. Quello che forse intendevi era DestroyWindow().

WM_CLOSE normalmente è un messaggio che viene generato dalla procedura di finestra predefinita, in risposta alla pressione di Alt +F4 o facendo clic sul pulsante di chiusura della finestra. Il messaggio sottostante è WM_SYSCOMMAND, SC_CLOSE. È possibile generare anche nel codice, come una voce di menu Finestra + Chiudi.

È possibile ascoltare per WM_CLOSE nella procedura finestra o la mappa dei messaggi MFC. L'utente si aspetta che la finestra venga chiusa. Quindi normalmente chiami DestroyWindow(). Non è necessario, è possibile visualizzare una finestra di messaggio per esempio e chiedere all'utente se i dati devono essere salvati. E se fa clic su n., allora non si chiama DestroyWindow().

Problemi correlati