4

したがって、純粋な WinAPI を使用したダイアログ ベースのアプリケーションがあります。メイン ダイアログと、ツールウィンドウである他の複数のダイアログがあります。これらのツール ウィンドウは自由に動き回ることを意図しており、ユーザーはそれらをドラッグしたり、非表示にしたり、表示したりできますが、タスクバー エントリはありません。これは私が意図したものですが、問題は、メイン ウィンドウから別のアプリケーションに切り替えて、メイン ウィンドウのタスクバー エントリをクリックすると、メイン ウィンドウは表示されますが、ツールウィンドウは表示されないことです。それらはメイン ウィンドウや他のアプリケーションのウィンドウの後ろに隠れたままになり、最上位のウィンドウをすべて移動してツール ウィンドウを追い詰めるまで、それらを使用することはできません。

したがって、これを回避するために私がやろうとしているのは、ユーザーがウィンドウを最小化から復元したときに、すべてのツール ウィンドウを列挙し、おそらくSetActiveWindow().

しかし、ウィンドウが復元されたときに送信されるメッセージは何ですか? WM_SHOW、または WM_RESTORE を考えていましたが、存在しません。

別の質問です。これに答えた場合、最初の質問は関係ありません。その回避策を使用する必要がなくなるためです。すべてのツール ウィンドウを前面に表示するより良い方法はありますか?

4

2 に答える 2

5

ツール ウィンドウに(ではなくWS_POPUP)スタイルを指定し、メイン ウィンドウを親にします (厳密には、それが所有者ウィンドウです)。そうすれば、ツール ウィンドウはメイン ウィンドウの上に表示されたままになります。これはあなたが望むものかもしれません(そうでないかもしれません)。 WS_OVERLAPPED

于 2012-10-14T18:41:36.417 に答える
4

この質問に対する単純な答えは、 の値を聞いてWM_SIZE応答することです。wParamSIZE_RESTORED

もう 1 つの明白な可能性は、すべてのツール ウィンドウをメイン ウィンドウが所有するようにすることです。ツールウィンドウが常にメインウィンドウの上にあることに満足している限り、これで問題は解決します。所有されているウィンドウは、所有者が最小化されると非表示になり、所有者が復元されると再表示されます。

Window Featuresに関する MSDN トピックで所有権の詳細を確認してください。

于 2012-10-14T18:40:43.247 に答える