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