SDIでいろいろな画面を使う

[戻る]
亀山 2010/01/29(金) 12:53:19
画面左にモード切替機能を置き、選択されたモードによって
メイン画面を切り替えるというOutlookのようなアプリケーションを、
メニューやツールバー付きのSDI形式で作成しようとしています。
モード切替部分はメインフレームにサイドバーとして置こうと思っています
(Feature Packの機能をそのまま使えそうです)。

ダイアログベースのアプリだと、モードごとの子ダイアログを用意しておき、
選択されたモードによって表示非表示を切り替えるやりかたができたのですが、
これをSDIでやろうとすると、どのような設計になるのでしょうか。

・子ダイアログに相当するものをビューとして複数作成する?
・その場合、各ビューはどこでどのように作成し、どうやって表示を切り替える?
・各ビューで表示する内容を1つのドキュメントが一括して持ってしまう?

それとも、ドキュメント/ビューの構造は使わずに、
CWnd派生クラスのCChildViewの中でダイアログベースと同じようなことを
やっていくべきでしょうか?

また、もう一つ質問があるのですが、
上記のようなモード切り替え機能を作る際、
選択されているモードによってメニューやツールバーの内容を変えたいのですが、
なにかよい方法やサンプルをご存じのかたはいらっしゃいませんでしょうか。

よろしくお願いします。

亀山 2010/01/29(金) 12:54:26
環境を書き忘れてしまいました。
「Feature Pack」と書いてあるとおり、VC2008 MFC です。
よろしくお願いします。

gak 2010/01/29(金) 17:23:16
> ・子ダイアログに相当するものをビューとして複数作成する?
> ・その場合、各ビューはどこでどのように作成し、どうやって表示を切り替える?
> ・各ビューで表示する内容を1つのドキュメントが一括して持ってしまう?
↓ページに載っているサンプルコードが参考になるかと
http://msdn.microsoft.com/ja-jp/library/e59dtf8h%28loband%29.aspx

> 選択されているモードによってメニューやツールバーの内容を変えたいのですが、
先に紹介したページの OnViewChange() 関数内で望むがままに変えてやれば良いかと

仲澤@失業者 2010/01/29(金) 18:05:58
以下は個人的な感想ですが、SDIとは次の条件が成り立つ、
わりと限られたケースのアプリケーションにのみ適用すべきです。

1.ドキュメントに相当する処理対象があること
2.一度に扱うドキュメントは1つ
3.そのドキュメントには、1つ以上のビューが対応する(マルチOK)
4.ドキュメントが閉じられることは、すなわちビューが閉じられること

あんまり例を見ませんが、SDIはマルチビューを許可しています。
マルチビューのお作法はヘルプに書いてあるので探してみては
どうでしょう。

で、ドキュメントに関係ないペインについては、MFCは何も語って
いないので、何をしても問題ないでしょう。

カレントビューに対応したトップツールバーも一つの考え方
ですが、自分なら、ビューにつけちゃいますね。
その方が簡単だし。

亀山 2010/02/02(火) 12:17:14
[[解決]]
gakさん、仲澤@失業者さん、ご意見ありがとうございます。

gakさんに教えていただいたサイトや
仲澤@失業者さんに教えていただいたヘルプの情報をもとに、
http://msdn.microsoft.com/ja-jp/library/s199bks0(VS.80).aspx
などのサイトを見つけることができました。

2個目以降のビュークラスを単独でnewで作ってすべてメンバに保持したり、
それのためにprotectedになっているコンストラクタをpublicに書き換えたり、
SetWindowLong()でウィンドウIDを無理やり変えたり、といった、
MFC自体が想定していなかった挙動を無理やり実現した感があるようです。

この実装方法を参考にしてみようかと思います。
ありがとうございました。

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