質問ですが、VC6.0でMDIのプログラムでドキュメントクラスが不必要なプログラムを作ってるんですが、ビューにデータを表示する時にドキュメントを使わないのでドキュメントは必要ありません。単純にフォームを呼び出して、データベースからデータを引っ張ってきて・・・という処理だけなんです。
子ウィンドウだけ作ってドキュメントは作らないプログラムの方法を教えてください。表現がおかしいかも知れませんが・・・。よろしくお願いします。
MFC はドキュメントを使う前提で作られているので、外れたことをすると難しくなります。
とりあえずダミーのドキュメントクラスを作っておいて、アクセスしなければよいだけでは?
void CXXXView::OnDraw(CDC* pDC)
{
CXXXDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
}
ここでpDocがドキュメントクラスのポインタでドキュメントクラスの変数にアクセスしたいときはアロー演算子で呼び出します。
使わないのであればシャノンさんの言うように無視すればいいだけのことです。
ダミーのを作るという話もありますがたぶん金田さんはアプリケーションウィザードを使って作っているのであって、手書きで位置から作っているわけではなさそうですね。
HOW TO本によってはドキュメントクラスを使わないでというものが多いですがVC++の利点を生かしたいのであればドキュメント_ビューアーキテクチャーは完璧に理解しておきたいものです。
MFCに関しての本は結構少ないようですが
「MFC アンサーブック」(洋書なら入手可)などが評判が高そうです。
私も初心者なので偉そうなことはいえませんが、以上お役に立てれば
皆さんのおっしゃる通りなのですが...
データベース自体が本来ドキュメントクラスで管理するべき物なのでは
ないでしょうか。
外部にデータベースを操作するクラスがある場合でも、そのクラスを
ドキュメントのメンバにした方が後から見た時にわかりやすいと思います。
みなさん、色々なアドバイスありがとうございます。
確かに使わないのであれば無視するというのも手ですね。
その絡みで質問なんですが、アプリケーションウィザードのステップ1に「ドキュメント/ビューアーキテクチャのサポート」のチェックを外すとドキュメントが作成されないみたいなんですが、この場合のビューはCWndの継承をロードしているようです。私は基本的にCFormViewの継承のビューを使いたいのですが、このままのプログラムだと使えそうにありません。どうかアドバイスください。
void CXXXApp::OnFileNew()
{
CMainFrame* pFrame = STATIC_DOWNCAST(CMainFrame, m_pMainWnd);
// 新しい MDI 子ウィンドウを作成します
pFrame->CreateNewChild(
RUNTIME_CLASS(ビュークラス名), IDR_MDISAMTYPE,
m_hMDIMenu,m_hMDIAccel);
}
どうもこのCreateNewChildの第一引数のクラスがCMDIChildWndを基本クラスとしたものじゃないといけない雰囲気なんですが、ちょっと解決方法がわかりませんでした。
CFormView などの CView 派生クラスは、まさに、
「ドキュメント/ビューアーキテクチャのサポート」
の「ビュー」に相当しますから、
サポートをはずしたら使えないのは当然です。
「ドキュメント/ビューアーキテクチャのサポート」とはドキュメントとビューのクラスを最初から作るということではなかったんですね。勘違いしてました。
とりあえずドキュメントは無視する方向でプログラムしようと思います。
皆さんありがとうございました。
ツイート | ![]() |