CFrameWnd、CDocument、CView(CEditView,CFormViewなど用途に合わせて選択)を継承したクラスを作成する。
CMultiFrame,CMultiFrameDoc,CMultiFrameView とする。
リソースでIconとMenuを新たに作成し、同一のIDを割り当てる。(ここでは、IDR_MULTIFRAME とする。)
作成したクラスのヘッダファイルをインクルードする。
新規ウィンドウを作成したい部分で、以下のコードを追加する。
CSingleDocTemplate* pTemplate = new CSingleDocTemplate(
IDR_MULTIFRAME, // 上記で作成したIconとMenuのリソースID
RUNTIME_CLASS(CMultiFrameDoc), // 上記で作成したCDocumentの継承クラス
RUNTIME_CLASS(CMultiFrame), // 上記で作成したCFrameWndの継承クラス
RUNTIME_CLASS(CMultiFrameView)); // 上記で作成したCViewの継承クラス
AfxGetApp()->AddDocTemplate(pTemplate);
CDocument* pDoc = pTemplate->CreateNewDocument();
if (pDoc != NULL){
CFrameWnd* pFrame = pTemplate->CreateNewFrame(pDoc, NULL);
pTemplate->InitialUpdateFrame(pFrame, pDoc);
}
上記を繰り返すことで新たにフレームウィンドウを何個でも作成できる。
一度作成したテンプレートは、ポインタを確保しておけば使い回し可能。
アプリケーション終了時に自動で破棄されるので、自身でdeleteする必要はない。
作成したフレームウィンドウは、メインウィンドウを閉じると自動的に閉じてDestroyされる。
ただし、ダイアログから作成したフレームウィンドウは、ダイアログを閉じても自動でDestroyされないので、残っている場合は自分でDestroyする。(先にフレームウィンドウを閉じた場合は、その時点でDestroyされるので自身でDestroyは不要。)
最終更新:2011年09月27日 12:35