12

win32 プログラミングでメッセージ ループがどのように機能するかについて、少し混乱しています。私のWinMain中で私はいつも次のように言います:

while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
    TranslateMessage ( &msg );
    DispatchMessage ( &msg );
}

これは、アプリケーションが停止するまでほぼ実行される while ループです。これは、ウィンドウごとではなく、アプリケーションごとにメッセージ ループが 1 つあるということですか?

4

1 に答える 1

14

メッセージとメッセージキューについてから:

複数のスレッドを持つアプリケーションでは、ウィンドウを作成する各スレッドにメッセージ ループを含めることができます。

メッセージ キューは複数のウィンドウをサポートできることに注意してください... の 2 番目のパラメータGetMessageは、メッセージを監視するウィンドウのハンドルです。その場合NULL、スレッドのすべてのウィンドウ。

2 番目の注意として、ウィンドウなしでメッセージ キューを作成することが可能です (少なくとも Windows 2000 以降)。のドキュメントで説明されていますPostThreadMessage

メッセージがポストされるスレッドで、PeekMessageここに示すように呼び出して、システムにメッセージ キューを作成させます。

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
于 2013-08-07T18:56:00.023 に答える