Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Gdy użytkownik zamknie okno, ta akcja wyzwala sekwencję komunikatów okna.
Użytkownik może zamknąć okno aplikacji, klikając przycisk Zamknij lub za pomocą skrótu klawiaturowego, takiego jak ALT+F4. Każda z tych akcji powoduje, że okno otrzyma komunikat WM_CLOSE. Komunikat WM_CLOSE umożliwia wyświetlenie monitu dla użytkownika przed zamknięciem okna. Jeśli naprawdę chcesz zamknąć okno, wywołaj funkcję DestroyWindow. W przeciwnym razie wystarczy zwrócić zero z komunikatu WM_CLOSE, wtedy system operacyjny zignoruje ten komunikat i nie zniszczy okna.
Oto przykład, jak program mógłby obsługiwać WM_CLOSE.
case WM_CLOSE:
if (MessageBox(hwnd, L"Really quit?", L"My application", MB_OKCANCEL) == IDOK)
{
DestroyWindow(hwnd);
}
// Else: User canceled. Do nothing.
return 0;
W tym przykładzie funkcja MessageBox wyświetla modalne okno dialogowe zawierające przyciski OK i Anuluj. Jeśli użytkownik kliknie przycisk OK, program wywołuje DestroyWindow. W przeciwnym razie, jeśli użytkownik kliknie Anuluj, wywołanie DestroyWindow zostanie pominięte, a okno pozostanie otwarte. W obu przypadkach zwróć zero, aby wskazać, że komunikat został obsłużony.
Jeśli chcesz zamknąć okno bez monitowania użytkownika, możesz po prostu wywołać DestroyWindow bez wywołania MessageBox. Jednak w tym przypadku istnieje skrót. Pamiętaj, że DefWindowProc wykonuje domyślną akcję dla dowolnego komunikatu okna. W przypadku WM_CLOSEDefWindowProc automatycznie wywołuje DestroyWindow. Oznacza to, że jeśli zignoruj komunikat WM_CLOSE w instrukcji switch, okno zostanie domyślnie zniszczone.
Gdy okno zostanie zniszczone, otrzyma komunikat WM_DESTROY. Ta wiadomość jest wysyłana po usunięciu okna z ekranu, ale zanim zajdzie proces niszczenia (w szczególności zanim zostaną zniszczone okna podrzędne).
W głównym oknie aplikacji zazwyczaj odpowiadasz na WM_DESTROY, wywołując PostQuitMessage.
case WM_DESTROY:
PostQuitMessage(0);
return 0;
Widzieliśmy w sekcji Komunikaty okien, że PostQuitMessage umieszcza komunikat WM_QUIT na kolejce komunikatów, powodując zakończenie pętli komunikatów.
Oto wykres blokowy przedstawiający typowy sposób przetwarzania komunikatów WM_CLOSE i WM_DESTROY: