SDIでいろいろな画面を使う – プログラミング – Home

SDIでいろいろな画面を使う
 
通知
すべてクリア

[解決済] SDIでいろいろな画面を使う


亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

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

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

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

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

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

よろしくお願いします。


引用未解決
トピックタグ
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

環境を書き忘れてしまいました。
「Feature Pack」と書いてあるとおり、VC2008 MFC です。
よろしくお願いします。


返信引用
gak
 gak
(@gak)
ゲスト
結合: 21年前
投稿: 132
 

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

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


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

以下は個人的な感想ですが、SDIとは次の条件が成り立つ、
わりと限られたケースのアプリケーションにのみ適用すべきです。

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

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

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

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


返信引用
亀山
 亀山
(@亀山)
ゲスト
結合: 18年前
投稿: 133
Topic starter  

gakさん、仲澤@失業者さん、ご意見ありがとうございます。

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

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

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


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました