お世話になっております。
ゆうと申します。
現在 MFC・MDI でプログラムを作成しているのですが、
皆さんは子ウィンドウ共通の設定やプログラムの初期化処理は
どこでしていますか?
(構成ファイルの読み込み、子ウィンドウのフォントなど...)
ドキュメントはビューと同じ数だけ生成されると記憶しておりますので、
CMyDoc にフォントや子ウィンドウの大きさの変数を置くのは効率が悪いと
思いまして、CMyApp クラスに共通の変数や関数を置いて設定・初期化処理を
しているのですが良いのでしょうか?
わかりにくい文章ですいませんが、ご教授いただけないでしょうか。
よろしくお願いします。
>現在 MFC・MDI でプログラムを作成しているのですが、
>皆さんは子ウィンドウ共通の設定やプログラムの初期化処理は
>どこでしていますか?
>(構成ファイルの読み込み、子ウィンドウのフォントなど...)
私は、構成ファイルの読み込みは CMyApp で行っています。
「設定」関連の管理は CmyApp でほぼ全面的に管理します。
「設定」を反映した結果である、各種値・オブジェクトインスタンス(=フォントやブ
ラシなど)は、それを実際に使用するクラスかその親クラスで保持します。
>ドキュメントはビューと同じ数だけ生成されると記憶しておりますので、
微妙に間違っています。
1つのドキュメントに対して、複数のビューが対応することもあり得ます。
渋木宏明(ひどり)さん、素早い回答ありがとうございます。
>私は、構成ファイルの読み込みは CMyApp で行っています。
>「設定」関連の管理は CmyApp でほぼ全面的に管理します。
>「設定」を反映した結果である、各種値・オブジェクトインスタンス(=フォントや
>ブラシなど)は、それを実際に使用するクラスかその親クラスで保持します。
すいません、私の読解力不足で少々わからないことがあります。
例えばブラシの設定の場合は CMyApp と、それを使用する
CMyView で値を保持するということでしょうか?
それとも、CMyApp ではブラシの読み込みと CMyView に値を渡す処理のみを行い、
インスタンスは持たないということでしょうか?
回答に対する質問で申し訳ありませんが、よろしくお願いします。
>微妙に間違っています。
>1つのドキュメントに対して、複数のビューが対応することもあり得ます。
これは私の勉強不足でした。
>例えばブラシの設定の場合は CMyApp と、それを使用する
>CMyView で値を保持するということでしょうか?
両方で同じ情報を持つという意味ではありません。
「設定」というのは往々にして「名前と値の組」で表せますから、CMyApp のメンバに
std:map<CString,_variant_t> m_settings
のような一種の連想記憶型のコレクションを持たせて、レジストリや .ini ファイルな
どから読み込んだ「設定」を保持します。
それぞれの設定が「ブラシであるかどうか」なんてことは CMyApp のあずかり知らぬこ
とです。
View で、設定に基づいた色のブラシを使いたければ
CMyApp* pApp = (CMyApp*) AfxGetApp();
int nColor = pApp->m_settings [_T(BrushColor)];
のようにして「設定値」を取り出し、ブラシを作成します。
CBrush を保持する必要があれば、それは CView で行います。
。。。ということです。
丁寧な解説ありがとうございます。
なるほど、そういうことでしたか。
確かにその方法だと、CMyApp クラスで値の判定を行わなくていいので楽ですし、効率が
良さそうです。
>std::map<CString, _variant_t> m_settings;
というのも、使いやすそうです。
大変参考になりました。
どうもありがとうございました。