none
MDIで表示されている子ウィンドウをすべて非アクティブにする方法 RRS feed

  • 質問

  •   こんにちは。

      VisualStudio2005 で XP 上でプログラムしています。

     

       MDIで表示されている子ウィンドウ(CMDIChildWndから派生したもの)をすべて非アクティブにする方法を

    探しています。ウィンドウのワークスペース部分をクリックしたときにMDI子ウィンドウを非アクティブに

    したいのです。

     

    いくつか実験してみました。

    •    SendMessageでWM_ACTIVATEを送信して内部的には非アクティブになっているようですが、
      見た目が非アクティブになりませんでした。一瞬タイトルバーが非アクティブ状態になるのですが、
      アプリケーションを画面からはずれるようにして、戻すとタイトルバーがアクティブの色になって
      しまっています。
    •    表示されないMDI子ウィンドウを作って、このウィンドウをアクティブにする方法も考えて実験して
      みたのですが、作成しているプログラムの都合で利用できません。
    •    最後に考えたのが、CMDIChildWndのOnNcPaintを利用してタイトルバーを再描画する方法ですが、
      デスクトップがXPテーマで表現されている場合とWindowsクラシック(Windowsクラシックはテーマでは
      ないようで)とで二通りの描画を管理しなければならないのと、メンテにちょっと不安が残ります。

      といった感じ結局どれもうまくいかずにここで質問させていただきました。

      もしご存じでしたら教えていただけないでしょうか。

      お願いいたします。

    2007年12月11日 11:47

すべての返信

  • しののめさん、こんにちは。

    MDI 親フォームが持つアクティブなコントロールを NULL にすることが適わないようです。
    Form を透明化してフォーカスを奪わせておくなんて方法は思いつきました。


    WMessage 投げても無視されちゃう...

    2007年12月12日 1:54
  • じゃんぬねっと さんこんにちわ。

     

      投稿後もいろいろ試してみましたが、仕様的にできないというということですね。

      VisualStudio を MDI モードで使用していますが、同じような感じにできればと

    思っていました。ただ、VisualStudio も MID子ウィンドウを常にアクティブな状態を

    無理やり非アクティブにしているような挙動が見えます。

     

      時間と相談でいろいろやってみたいと思います。

     

      ありがとうございました。

    2007年12月13日 9:29