Menutup Jendela

Saat pengguna menutup jendela, tindakan tersebut memicu urutan pesan jendela.

Pengguna dapat menutup jendela aplikasi dengan mengklik tombol Tutup , atau dengan menggunakan pintasan keyboard seperti ALT+F4. Salah satu tindakan ini menyebabkan jendela menerima pesan WM_CLOSE . Pesan WM_CLOSE memberi Anda kesempatan untuk meminta pengguna sebelum menutup jendela. Jika Anda benar-benar ingin menutup jendela, panggil fungsi DestroyWindow . Jika tidak, cukup kembalikan nol dari pesan WM_CLOSE , dan sistem operasi akan mengabaikan pesan dan tidak menghancurkan jendela.

Berikut adalah contoh bagaimana program dapat menangani 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;

Dalam contoh ini, fungsi MessageBox memperlihatkan dialog modal yang berisi tombol OK dan Batal . Jika pengguna mengklik OK, program memanggil DestroyWindow. Jika tidak, jika pengguna mengklik Batal, panggilan ke DestroyWindow dilewati, dan jendela tetap terbuka. Dalam kedua kasus, kembalikan nol untuk menunjukkan bahwa Anda menangani pesan.

Jika Anda ingin menutup jendela tanpa meminta pengguna, Anda cukup memanggil DestroyWindow tanpa panggilan ke MessageBox. Namun, ada pintasan dalam kasus ini. Ingat bahwa DefWindowProc menjalankan tindakan default untuk pesan jendela apa pun. Dalam kasus WM_CLOSE, DefWindowProc secara otomatis memanggil DestroyWindow. Itu berarti jika Anda mengabaikan pesan WM_CLOSE dalam pernyataan pengalihan Anda, jendela dihancurkan secara default.

Ketika jendela akan dihancurkan, jendela akan menerima pesan WM_DESTROY . Pesan ini dikirim setelah jendela dihapus dari layar, tetapi sebelum penghancuran terjadi (khususnya, sebelum jendela anak dihancurkan).

Di jendela aplikasi utama, Anda biasanya akan merespons WM_DESTROY dengan memanggil PostQuitMessage.

case WM_DESTROY:
    PostQuitMessage(0);
    return 0;

Kami melihat di bagian Pesan Jendela bahwa PostQuitMessage menempatkan pesan WM_QUIT pada antrean pesan, menyebabkan perulangan pesan berakhir.

Berikut adalah bagan alur yang memperlihatkan cara umum untuk memproses pesan WM_CLOSE dan WM_DESTROY :

bagan alur memperlihatkan cara menangani pesan wm-close dan wm-destroy

Berikutnya

Mengelola Status Aplikasi