Windows API でウィンドウが終了したことを通知するメッセージを取得する方法

ウィンドウの閉じたメッセージを得るには、Windows APIのメッセージループとメッセージ処理機構を使用する。

最初に、主メッセージループ関数 GetMessage を使ってメッセージを取得する。次に、ウィンドウプロシージャ WndProc でウィンドウを閉じるメッセージを処理する。

次に簡単なサンプルコードを示します。

#include <windows.h>

LRESULT CALLBACK WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
    switch (msg)
    {
        case WM_CLOSE:
            // 在这里处理窗口关闭的消息
            MessageBox(NULL, "窗口将要关闭", "提示", MB_OK);
            DestroyWindow(hwnd);
            break;
        case WM_DESTROY:
            PostQuitMessage(0);
            break;
        default:
            return DefWindowProc(hwnd, msg, wParam, lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // 注册窗口类
    WNDCLASS wc = {0};
    wc.lpfnWndProc = WndProc;
    wc.hInstance = hInstance;
    wc.hbrBackground = (HBRUSH)(COLOR_BACKGROUND);
    wc.lpszClassName = "MyWindowClass";
    RegisterClass(&wc);

    // 创建窗口
    HWND hwnd = CreateWindow("MyWindowClass", "My Window", WS_OVERLAPPEDWINDOW, 100, 100, 500, 500,
                             NULL, NULL, hInstance, NULL);

    // 显示窗口
    ShowWindow(hwnd, nCmdShow);

    // 消息循环
    MSG msg;
    while (GetMessage(&msg, NULL, 0, 0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    return msg.wParam;
}

上のサンプルコードでは、WndProc関数内でWM_CLOSEメッセージを処理することで、ウィンドウの閉じられるメッセージを取得している。そのメッセージが来ると、ダイアログを表示してからウィンドウを破棄する。

なお、これは簡単な例ですので、実際にはそれぞれの必要に応じて適切な対応が必要となる場合があります。

bannerAds