1

最近、Win32 でモードレス ダイアログを使用したい状況に遭遇しました。

Win32: ツールバー ダイアログがフォーカスされず、メイン ウィンドウの処理が遅くなる!?

そして、これが私のメッセージループであることがわかりました:

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd) {
    // Doing required stuff here...

    while (GetMessage(&Msg, hWnd, 0, 0) > 0) {
        // Processing messages here...
    }
}

実際、このメッセージ ループは、モーダル ダイアログが独自のメッセージ ループを処理するため、モーダル ダイアログで完全に正常に動作するため、モードレス ダイアログがない限り正常に動作します。hWndのインスタンスを置き換えたとき、モードレス ダイアログは問題なく動作しましたNULL。違いはわかりませんが、特定のウィンドウではなくメッセージが表示されるようです。

このメッセージ ループが正しく動作しない原因を誰か説明できますか?

これとして:

while (GetMessage(&Msg, NULL, 0, 0) > 0) {
    // Processing messages here...
}

完璧に動作します!

4

1 に答える 1

3

違いは明らかです。 in を指定しHWNDましたGetMessage。したがって、ツールバーを含め、他のウィンドウのメッセージを処理していません。GetMessageのドキュメントを参照してください

于 2010-12-16T21:03:51.437 に答える