• ベストアンサー

MFC ダイアログ→MDI風に変更

TeijigoTeatimeの回答

  • ベストアンサー
回答No.1

こんにちは。 VisualStudioのようなドッキングペインではなく、ただ単に左右の大きさを変えたいということであれば方法はいくつかあると思います。 (1)スプリッターウィンドウ(CSplitterWnd)をダイアログ上に貼り付けて使う方法。 スプリッターウィンドウ内の貼り付ける子ウィンドウが 2 枚必要になります。 (2)左右用の子ウィンドウを用意して、ダイアログの上に置いて境目を操作を自前で実装する。 どちらにしても、ダイアログ上に置いたコントロールは、すべて左右用の子ウィンドウに移す必要があります。 メッセージの送信先に注意してください。SetOwnerを有効に使ってください。 スプリッターウィンドウを使う場合は少々癖がありますので注意してください。

spendtoomuch
質問者

お礼

有難うございます。参考になります。 コントロールの移植が必要なのであれば、 さすがに影響範囲が多そうですね。

関連するQ&A

  • MDIでのダイアログ生成

    VC++2005でMDIアプリケーションを作成しています。 ダイアログベースでは、DoModal()にてダイアログを生成していましたが、 MDIでのダイアログ生成の方法が分かりません。。 調べた結果、 (1)CreateWindow()にてクライアントウィンドウを作成 (2)CreateMDIWindow()にて子ウィンドウを作成 の順序で処理を行うことは分かりましたが、 関数の一部の引数に何を設定してやれば良いのかが不明です。。 ※下記はネット上にあったサンプルソースです。  「???」の箇所が不明な引数です。 (1) CreateWindow(   TEXT("MDICLIENT"), //MDICLIENT は固定です   NULL,   WS_CHILD | WS_VISIBLE | WS_CLIPCHILDREN,   0, 0, 0, 0,   hWnd,       //メインウィンドウのハンドル←???   (HMENU)1,    //←???   hInst,       //インスタンスハンドル←???   (LPSTR)&ccs    //CLIENTCREATESTRUCT構造体のポインタ←???  ); (2) HWND CreateMDIWindow(  MDI_CHILD ,   //ウィンドウクラス名  TITLE ,     //ウィンドウのタイトルバーテキスト  0 ,       //ウィンドウスタイル。WS_MAXIMIZE(最大化表示)など  CW_USEDEFAULT , //X座標  CW_USEDEFAULT , //Y座標  CW_USEDEFAULT , //幅  CW_USEDEFAULT , //高さ  hClientWindow , //クライアントウィンドウのハンドル ←???  hIns ,      //インスタンスハンドル       ←???  0        //アプリケーション定義の値 ); なお、行いたい処理の流れとしては、 CTestDialogクラスより、CTest2Dialogクラスのダイアログを、 呼び出したいのです。 うまく説明できず申し訳ありませんが、 お詳しい方おられましたら、具体例など交えてご説明頂けると幸いです。 お手数ですが、どうか宜しくお願い致します。

  • MDIフォームでのモーダル

    こんにちわ。 visualstudio2005(vb.net)で開発を行っています。 MDIフォームを使ってシステムを作成しています。 親フォームの中にフォーム1を表示させそのフォーム1からボタンを押すとフォーム2が表示されるという仕様です。 希望としてはフォーム2を起動中はフォーム1は利用不可にしたい(モーダルのような感じで表示させたい)のですが、MDIではShowDialogは無理なようです。 MDIフォームでこういったことを実現するのは無理なのでしょうか? (VisualStudioの[ツール]-[オプション]の画面を参考に見てもモーダルのフォームはMDIから外れたエリアで表示されている気がします。) 解決策や代替の手段等ありましたらおしえていただけませんでしょうか? お忙しいところ大変申し訳ありませんがよろしくお願いいたします。

  • MFCのSDIとMDIについて

    MFCを使用する場合、ダイアログベースしか使用してこなかったためMDIとSDIについてよくわかりません。 実行してみるとフォーム?エディタ?みたいなものが立ち上がりますが、あれはいったい何をするためのものなのでしょうか? 検索してみると描画とかアニメーションとかがキーワードで出てきますが絵を描くものなのですか??

  • MFC・ダイアログベースで、ダイアログの変更内容が反映されない・・・

    初めて質問させていただきます。よろしくお願いします。 当方、VisualStdio2005内のC++2005で、 ダイアログベースにてツールを開発していました。 ある日、ダイアログ上に多くのEditコントロールを作成(追加)することになり、 ダイアログリソースをVC内のリソースエディタにて、 テキスト形式でコントロールを追加していきました。 そのときは、テキストでの変更内容がダイアログにも反映されていたのですが、 その後はダイアログにツールボックスでのコントロールの追加やサイズ変更など、 見た目には反映されてもビルド後に反映されなくなってしまいました。 クリーン後のリビルドでも、問題は解決しません。 原因と対策をご存知の方、いらっしゃいましたらご教授いただけませんでしょうか。 よろしくお願いします。

  • MFC MDIでステータスバーの追加。

    Vd++6.0 MFC。 MDIにてプログラムを作成しているのですが、 親ウィンドウにはステータスバーがついているのですが、 子ウィンドウにはついていません。 子ウィンドウごとにそれぞれのステータスを表示しようと思っているのですが、 ステータスバーを作成する方法がわかりません。 そなたか、ご存知の方宜しくお願い致します。 足りない部分は補足させていただきます。

  • MFC:MDIにおけるビューのアクティブ化

    ・環境 VisualStudio2008SP1+FeaturePack Windows7 64bit タブドキュメント形式でMDIアプリを作っているのですが、複数ドキュメントがある際にプログラムから任意のビューを安全にアクティブ化させる方法がわからずに困っております。CMainFrame::SetActiveViewメソッドを使用すると指定したビューがアクティブになり所望の動作になるのですが、この方法だとドキュメントをクローズするときに以下の例外が出て怒られます。SetActiveViewはビューのOnCreate内で実行しています。  アクティブ化を解除しているアクティブ化コンテキストは、最近アクティブ化されたものではありません。 こういった状況に遭遇しない方法を探っているのですが使用するAPIと適切な使用タイミングがつかめず困っております。どなたかにご教授いただければ幸いです。

  • ツリーコントロールの開閉アイコンの変更

    こんにちは。Windows上でプログラムをしています。 ツリーコントロールをダイアログに貼り付けているのですが、開閉アイコン「+」「-」のアイコン変更はできるものなのでしょうか? 「+」「-」のアイコンをVisualStudioのプロジェクトのプロパティダイアログの左ペインに表示されているような三角形に変更したいと思っています。

  • ダイアログとリストコントロールのサイズ変更

    VC++でダイアログベースのプログラミングをしています。 初心者です。 ダイアログの枠をドラッグしてサイズ変更ができるようにしたくて、 先週からネットや本を読み漁っていたのですが、 先日リソースのプロパティで枠の種類を[サイズ変更枠]にすると、 可変にできることがわかりました。 ただ、ダイアログの大きさは変更できるようになったものの、 ダイアログに配置してあるリストコントロールのサイズは固定のままです。 これを、ダイアログの枠のサイズに合わせて可変にすることはできないでしょうか。 また今回の内容に限らず、ダイアログやコントロールを作成する時に、 参考になるような本やサイトでオススメのものがありましたら、 ぜひ教えて頂きたいです。 ちなみに私が今参考にしている本はこの3冊です。 「図解でわかるVisualC++2005 Express Edition」 「VisualC++逆引き大全 500の極意」 「VisualC++.NET 逆引き大全 500の極意」

  • MDIタブ付グループでビューを切り替える

    VS2008 C++にてVisualStudioライクなアプリを作成しています。 タブ付グループでビューを切り替えるショートカットをはないものでしょうか。 自分でコードを書かないとならないのでしょうか。 通常のMDIであれば、「Ctrl + F6」がNext Viewのショートカットでしたが、これに変わるような操作の実装方法をアドバイスいただけないでしょうか。

  • photoshopでダイアログボックスの大きさ変更

    win7です。photoshop CS6で例えばトーンカーブを操作するため、「イメージ」→「色調補正」→「トーンカーブ」と進んだとき表示されるダイアログボックスの大きさを変更したいのです。 デスクトップPC(モニター 1920✕1200)では画面に対してほどよい大きさなのですが、ノートでは(モニター 1366✕768)ではボックスが画面に対して天地で3分の2,左右40%ぐらいを占め、画像を大きく遮ってしまうのです。 通常こうしたボックスは、コーナーにポインターを持っていって、大きさを変更できることが多いのですが、photoshopはできないのでしょうか。なにか方法はないのでしょうか。 ご存じの方、ぜひご教示下さい。よろしくお願い致します。