/////////////////////////////////////////////////////////////////////////////////////////// // 新規プロジェクト プロジェクト:MFCアプリケーショ シングルアプリケーション Unicode オフ スタイル切り替え オフ スタティックライブラリ 複合ドキュメントサポートなし /////////////////////////////////////////////////////////////////////////////////////////// // ドキュメントクラス CXXXDoc::Seialize ファイル入出力を記述.このかなからUpdateAllViews(NULL)でViewを呼ぶ CXXXDoc::UpdateAllViews() Viewを更新し,CXXXView::OnDraw()に制御を移す. /////////////////////////////////////////////////////////////////////////////////////////// // ビュークラス CScrollView, CEditView, CGtmlView Viewクラスからは GetDocument()関数でDocumentクラスを得る. CXXXDoc* pDoc = GetDocument(); ASSERT_VALID(pDoc); m_pImage = new CImage(); m_pImage->Load(pDoc->GetFileName()); void CXXXView::OnDraw(CDC* pDC) MFCでは OnPaint()は使用してはいけない. /////////////////////////////////////////////////////////////////////////////////////////// // メインフレームクラス /////////////////////////////////////////////////////////////////////////////////////////// // アプリケーションクラス CXXXApp::InitInstance() クラスが生成されるとまずこの関数が呼ばれる CXXXApp:OnFileOpen() ファイルのオープン処理 DoPromptFileName() ダイアログ OpenDocumentFile(newName) が呼ばれる CXXXApp::OpenDocumentFile() Doc, Viewクラスを生成し,CXXXDoc::Serialize() を呼ぶ 「ファイル」→「開く」 // 通常の場合 CXXXApp::OnFileOpen() → OpenDocumentFile(newName) ファイルのオープン CXXXDoc::Serialize() [→ UpdateAllViews(NULL)]   ファイルの入出力 ChildFrame CXXXView::OnDraw()  表示 /////////////////////////////////////////////////////////////////////////////////////////// MDIの作られる順序    CDocument -> CChildFrame -> CView MDIの破棄されるれる順序 CView -> CChildFrame -> CDocument CView -> CDocument -> CChildFrame 状況によって順番が変わる?! /////////////////////////////////////////////////////////////////////////////////////////// DirectX9用ライブラリ winmm.lib d3d9.lib d3dx9.lib dxerr9.lib dxguid.lib DirectX Input dinput8.lib /////////////////////////////////////////////////////////////////////////////////////////// デバッグ用ライブラリ MagaDbg.h MagaDbg.lib コンパイラ定義指定 MAGADGB /////////////////////////////////////////////////////////////////////////////////////////// // 私流 MFC(MDI)プログラミング手順 ・リソースのメニューを作る.(ID)   「リソースビュウ」の「Menu」からメニュー用のCXXXAppのメッセージハンドラを登録. ・「表示」→「クラスウィザード」または,「リソースビュウ」の「Menu」の右マウス  ボタンで「クラスウィザード」を選び,CXXXAppにメッセージ処理用関数を登録する. (例:ON_COMMAND(ID_FILE_WIZ3D, OnFileWiz3d))   処理関数のあるファイル内では Resource.h をインクルード ・新しいウィンドウを作る場合は,CXXXAppでテンプレート用変数を用意. ・新しいクラスの作成 ワークスペースの「クラス表示」から「クラスの新規作成」を選び,ドキュメントクラスと ビュウクラスを生成(基本クラスを指定する)   基本クラスは CDocument, CView などを選ぶ. または 「クラスウィザード」を選び,「クラスの追加」→「新規」で新しいクラスを作る. ・クラスを ExClass からの派生に変更 ・CXXXAppのテンプレート定義とメッセージハンドラの関数(例:OnFileWiz3d())の内容を書く. ・ドキュメントクラスとビュウクラスの内容を書く ・ドキュメントクラスに仮想関数 OnOpenDocument() または OnNewDocument() を書く OnOpenDocument() はクラスウィザードで作成  CExDocument // データを既に持っている場合.hasViewData==TRUE doc.OnNewDocument() : MakeViewData(); // ファイルをオープンしてデータを読み込む. doc.OnOpenDocument() : ReadDataFile() → MakeViewData() ExMSGraph msGraph; // 読み込みデータ(既にもっているデータ).ReadDataFile() で作る. ExCmnHead cmnHead; // 表示用の View に渡すデータ.MakeviewData() で作る. ・ビュウクラスに仮想関数 OnInitialUpdate() を書く. OnInitialUpdate() はクラスウィザードで作成  処理の流れ: 例:ID_FILE_WIZ3D → OnFileWiz3d() → CreateDocFrmView() → initialDocView() → doc.OnNewDocument() or doc.OnOpenDocument() → view.OnInitialUpdate() → frame.ShowWindow() → view.OnDraw() → frame.SetFocus() → タイマー作動 → CreateDocFrmViewError() → ループバック /////////////////////////////////////////////////////////////////////////////////////////// イベント処理の追加 クラスビュー → クラスを右クリック → プロパティ → メッセージボタン /////////////////////////////////////////////////////////////////////////////////////////// アプリケーションクラス アプリケーション用のドキュメントテンプレートを登録 CreateDocFrmView() // Doc, Viewクラスの初期化 rslt = initialDocView(pdoc, pviw, fname);    doc->OnNewDocument() or doc->OnOpenDocument(fname) view->OnInitialUpdate() // Viewクラスの表示 view->ShowWindow(m_nCmdShow); 必要ならタイマースタート or 書き換え用 OnDraw()が随時呼ばれる