0

プロジェクト用に独立したウィンドウ ラッパー クラスを作成しようとしています。ほとんどの場合動作していますが、メイン メッセージ ポンプで WM_QUIT を取得する方法がわかりません。Windows を学習するために、他のライブラリを使用したくありません。

これは何が起こっているかの簡単な例です。

#include <iostream>
#include <Windows.h>

void TestPump()
{
    MSG msg = { 0 };

    PostQuitMessage(0);
    std::cout << "Posted WM_QUIT" << std::endl;

    while (true)
    {
        BOOL result = PeekMessage(&msg, (HWND) -1, 0, 0, PM_REMOVE);

        std::cout << "PeekMessage returned " << result << std::endl;

        if (result == 0)
            break;

        if (WM_QUIT == msg.message)
            std::cout << "got WM_QUIT" << std::endl;
    }
}

void MakeWindow()
{
    auto hwnd = CreateWindowEx(0, "Button", "dummy", 0, 0, 0, 32, 32, NULL, NULL, NULL, NULL);
    std::cout << std::endl << "Created Window" << std::endl << std::endl;
}

int main()
{
    TestPump();
    MakeWindow();
    TestPump();

    std::cin.get();

    return EXIT_SUCCESS;
}

PeekMessage のドキュメントはこちら: https://msdn.microsoft.com/en-us/library/windows/desktop/ms644943(v=vs.85).aspx

-1 HWND フィルターを使用する例を見つけることができませんでしたが、MSDN によると、HWND が NULL の場合にスレッド メッセージを受信するとのことです (これが WM_QUIT に当てはまることを確認しました)。 WM_QUIT で行います。

この問題は、ウィンドウを作成した場合にのみ発生します。

私が間違っていることはありますか、それともより良い方法がありますか?

4

2 に答える 2