WM 關閉

單擊應用程式的關閉按鈕時傳送。不要將此與 WM_DESTROY 混淆,WM_DESTROY 會在視窗被破壞時傳送。主要的區別在於可以在 WM_CLOSE 中取消關閉(想想 Microsoft Word 要求儲存你的更改),而不是在視窗已經關閉的情況下銷燬(想想 Microsoft Word 釋放記憶體)。

LRESULT CALLBACK winproc(HWND hwnd, UINT wm, WPARAM wp, LPARAM lp)
{
    static char *text;
    switch (wm) {
        case WM_CREATE:
            text = malloc(256);
            /* use the allocated memory */
            return 0;
        case WM_CLOSE:
             switch (MessageBox(hwnd, "Save changes?", "", MB_YESNOCANCEL)) {
                 case IDYES:
                      savedoc();
                                         /* fall through */
                 case IDNO:
                      DestroyWindow(hwnd);
                      break;
             }
             return 0;
        case WM_DESTROY:
            /* free the memory */
            free(text);
            PostQuitMessage(0);
            return 0;
    }
    return DefWindowProc(hwnd, wm, wp, lp);
}