Win32 App Closing the Window - yoshimune/LearningDirectX11 GitHub Wiki

This page refers to 【[Closing the Window](https://docs.microsoft.com/ja-jp/windows/desktop/learnwin32/closing-the-window】

ユーザーがウィンドウを閉じるとき、アクションは一連のウィンドウメッセージをトリガーします。

ユーザーは「閉じるボタン」をクリックするか、キーボードのALT+F4を押すことにより、ウィンドウを閉じることができます。これらのアクションのうちいずれかが、ウインドウはWM_CLOSEメッセージを受信させます。WM_CLOSEメッセージは、ウィンドウが閉じる前にユーザーに促す機会を提供します。もし本当にウィンドウを閉じたい場合は、DestroyWindow関数を呼び出します。それ以外の場合、WM_CLOSEメッセージへ単純に0を返した場合、OSはメッセージとウィンドウの破棄命令を無視します。

以下は、VM_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;

もし何もせずにウィンドウを閉じたい場合は、単純にDestroyWindowを呼べばよいです。しかし、このケースは短縮する場合があります。DefWindowProcはデフォルトのアクションを実行することを思い出してください。この例のWM_CLOSEは、DefWindowProcが自動的にDestroyWindowを呼び出します。

ウィンドウが破棄されるとき、WM_DESTROYメッセージを受け取ります。このメッセージはウィンドウがスクリーンから除去されたあとに送信されます。しかし、デストラクタが実行される前(特に、子ウィンドウが破棄される前)です。

メインアプリケーションでは、通常、PostQuitMessageを呼び出すことによってW<_DESTROYに応答します。

case WM_DESTROY:
        PostQuitMessage(0);
        return 0;

Next:Win32 App Managing Application State