プログラムの記述(MDI)方法について

[戻る]
ももっち 2003/02/10(月) 15:53:10
はじめて投稿させていただきます。宜しくお願いします。
今まではダイアログベースでの開発が主で、いざMDIでの開発となると
どこから手をつけてよいか悩んでいます。
基本的にMDIでは、Document, View, Frameの3つに分類され
Documentはデータ管理、Viewは表示ダイアログ、Frameはメインフレームという事までは
なんとなく理解しているのですが、実際のコーディングとなるとそれぞれ(3分類)のプロ
グラムの流れがバラバラでまとまりません。
正直、どこから質問したらよいか自分でもわからないのですが、
例えば、フレーム内にダイアログ(メニューバーの下)を表示しそのダイアログ上には
テキストボックスとボタンがあり、ボタン押下すると新しい子ウィンドウ上にテキスト内
のデータを表示するような方法を教えていただきたいです。

|---------------------------|          |---------------------------|
|ファイル 編集 ・・・     |          |ファイル 編集 ・・・     |
|---------------------------|          |---------------------------|
| テキストボックス/ボタン  |          | テキストボックス/ボタン  |
|---------------------------| −−→ |---------------------------|
|                           |          |                           |
|                           |          |  |------------|           |
|                           |          |  |子ウィンドウ|           |
|                           |          |  |------------|           |
|---------------------------|          |---------------------------|

PAI 2003/02/10(月) 17:13:26
問題を分割しましょう。
1.フレーム内にダイアログ(メニューバーの下(ダイアログバー?))を表示、
2.ダイアログ上にはテキストボックスとボタンがある、
3.ボタン押下すると新しい子ウィンドウが開く。
4.その子ウィンドウにテキスト内のデータを表示する。


いくつかまだ問題は残っています。
まず、ここでいう『ダイアログ』『新しい子ウィンドウ』
とはどのようなものをお考えでしょうか?
3.で新しいウィンドウを作るときに、新しいドキュメントは開かれるのでしょうか?


とか、いろいろありますが、
基本的にはダイアログバーをメインフレームにつくっておいて、
ボタンが押されたらメインフレームにメッセージを投げるかメソッドを呼ぶかして、
メインフレームはそのメッセージを受けたら新たにウィンドウを生成し、データを与える。
という方針でいいのではないかと思います。

ダイアログバーはダイアログバーで調べてください、サンプルはたくさんあるはずです。
で、問題をしっかり分割して、一つ一つどのオブジェクトに解決させるかを
見極めていきましょう。

ももっち 2003/02/10(月) 18:00:12
PAIさん、アドバイスありがとうございます。

>問題をしっかり分割して、一つ一つどのオブジェクトに解決させるかを見極めていきま
しょう。
そうなんです・・・改めてMDIの基礎から学んだほうが良いのですが、参考書では
本当の用語説明程度のものばかりだったので。(選んだ入門書が悪かった・・・)

>問題を分割しましょう。
>1.フレーム内にダイアログ(メニューバーの下(ダイアログバー?))を表示、
これはダイアログバーを挿入しています。

>2.ダイアログ上にはテキストボックスとボタンがある、
ここなのですが、当初の説明が間違っていました(すいません)。
何もコーディングせずに実行(スケルトンのみ)すると子ウィンドウが表示されてますが
方向として、起動時はこの子ウィンドウを表示しない状態で、メニューの「ファイル」−
「新規作成」で
新しい子ウィンドウを表示するとともに、メニューバーの下にダイアログバー(子ウィン
ドウ毎に特化したもの)を表示させます。(ここでテキストボックス・ボタンが表示されます)
このときの子ウィンドウは最大化サイズで表示します。

>3.ボタン押下すると新しい子ウィンドウが開く。
既に最大化されている子ウィンドウ上に指定サイズで子ウィンドウを表示させます。

>4.その子ウィンドウにテキスト内のデータを表示する。
データを表示します。

>新しい子ウィンドウはどのようなものをお考えでしょうか?
2.の段階では親(MainFrame)の子ウィンドウを考えており
4.での子ウィンドウは最終的にはリストボックスだけを表示するウィンドウにしたいで
すが、現段階では標準のダイアログで試そうと思っています。

どうも、ダイアログベースが頭から離れず切り替えに苦戦です・・・。

PAI 2003/02/11(火) 01:19:25
いろいろ錯綜しちゃってますが、

>起動時はこの子ウィンドウを表示しない
アプリケーションクラスのInitInstance()あたりで
ParseCommandLine とか ProcessShellCommand とかしてるところをいろいろいじると
最初はファイルを開かないようにできると思います。

>(子ウィンドウ毎に特化したもの)
ここでいう『子ウィンドウ』はViewのことだと解釈していいのでしょうか?
だとすると多種類のViewがあるわけで、
そのときドキュメントのほうはどうなっているのでしょうか。
1種類ドキュメントを複数ビューで編集するのか、ビューごとにドキュメントも違うのか?
それによってつくりがかなり変わってきます。


>メニューバーの下にダイアログバーを表示させます。
ダイアログバーはメインフレームが持っていると思うので、メインフレームで
そのダイアログバーに対し、ShowWindow() などしてから、RecalcLayout()
すれば表示非表示は制御できます。

Viewの種類ごとにダイアログバーの種類を変えるなら、
メインフレームには
ダイアログバーの種類を変えるメソッド、もしくはメッセージハンドラを用意して、
ViewのOnActivateあたりからそれをたたいてあげればよいでしょう。

ボタンやテキストボックスなどは今の段階では
『それをどのオブジェクトが管理するか』だけを意識しておくにとどめ、
『押したときどうするか』などは後回しにして、全体の骨組みを立てましょう。

PAI 2003/02/11(火) 01:25:02
普通に作るとダイアログバーはメインフレームで制御せざるを得ないんですが・・・

ももっち 2003/02/12(水) 13:04:12
PAIさん、ご丁寧にアドバイスをいただきありがとうございます。

もともとの質問内容からずれてしまうのですが、
PAIさんのアドバイスからMDIで作成するための要点を見出した気がします。
この要点をきっかけに改めて基礎を固めようと思います。(まだまだアマちゃんすぎました)
もう一度、自分なりに整理・基礎固めがある程度できた時に、当初の内容に関して
質問してみようと思います。
(基礎を固めれば必然に問題解決しそうな感じですよね)

とりあえず、この件に関してはここで「解決」という方向でいきます。
次回は別スレで質問しますので、今後とも宜しくお願い致します。

ももっち 2003/02/12(水) 13:04:46
[[解決]]
解決チェックし忘れ・・・

古いスレッドには追加発言できません。