- PR -

あるウィンドウをフォーカスを移さずに手前に移動したい

1
投稿者投稿内容
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2007-05-26 16:22
こんにちは。お世話になってます。

現在、VC++.NET 2005のC++/CLIでアプリケーションを開発しています。

まず、メインウィンドウ(A)があり、そこにファイルメニュー等があります。

そして、データのメインになるウィンドウ1つとサブになるウィンドウ複数個があり、それで1組とします(B)。
(A)ウィンドウからファイルを開くと1組の(B)ウィンドウが開き、それらにデータの内容が表示されます。

(B)の組は複数開くことができます。
(B)を複数開くとウィンドウだらけになるので、(B)のメインウィンドウをマウスでクリックしてアクティブにすると、それに付属するサブのウィンドウも同時に手前に表示したいのです。
ただ、付属するサブのウィンドウはデータのメインのウィンドウよりは奥にあるほうがいいです。

現在、(B)のデータのメインになるウィンドウのActivedイベントのなかで、サブのウィンドウも手前に持ってくるようにするため、サブのウィンドウのBringToFrontメソッドを実行して手前に持ってきて、データのメインになるウィンドウを再度BringToFrontで手前に持ってきています。

しかし、この方法ではメインのウィンドウのActivedイベントが再度走ったり、サブのウィンドウにフォーカスが移ったりして、ウィンドウがちらちらした感じになります。

各ウィンドウにフォーカスが移動せず、いっぺんに(B)ウィンドウ組まるごと他のウィンドウより手前に持ってくることは可能でしょうか?




[ メッセージ編集済み 編集者: maru 編集日時 2007-05-26 16:24 ]
ぶさいくろう
ぬし
会議室デビュー日: 2005/11/22
投稿数: 1232
お住まい・勤務地: 川崎市(は俺も含めてロクな人間が住んでないよw)
投稿日時: 2007-05-26 22:11
そういうときこそオーナーフォームの出番なんだろうけど設計も少し見直してみて。
きよの
常連さん
会議室デビュー日: 2004/02/07
投稿数: 34
投稿日時: 2007-05-27 14:19
引用:

各ウィンドウにフォーカスが移動せず、いっぺんに(B)ウィンドウ組まるごと他のウィンドウより手前に持ってくることは可能でしょうか?



ぶさいくろうさんの言うように Form#Owner プロパティでも maru さんの今回の要求であればできると思いますが、親子関係がもう少し複雑(例えば親が複数とか)になると対応できなくなります。
そのような場合は Windows API の SetWindowPos() を SWP_NOACTIVATE フラグ付きで使うとフォーカスを設定しない(アクティブにしない)でウィンドウの Zオーダー を変えることができます。
maru
ぬし
会議室デビュー日: 2003/01/27
投稿数: 412
投稿日時: 2007-05-28 09:07
こんにちは。
返答ありがとうございました。きよのさんの方法でうまくいきました。
1

スキルアップ/キャリアアップ(JOB@IT)