本ページは公開が終了した情報の複製であり、掲載時点での情報です。本ページに記載されている内容について各所に問い合わせることはご遠慮下さい。
サポート技術情報

[MSVC] MDI で子ウィンドウ新規作成時にテンプレート一覧を表示させない

文書番号: 113257

最終更新日: 2004/01/23


この資料は以下の製品について記述したものです。


概要

この資料は、複数のドキュメント テンプレートを持つ MFC アプリケーションの子ウィンドウ作成時に、テンプレートを選択するダイアログを表示させずに特定のテンプレートで作成する一つの方法を紹介したものです。

詳細

MDI 子ウィンドウ (CFrame, CDocument, CView の組み合わせとなる CMultiDocTemplate ベースのウィンドウ) 作成時に CWinApp::OnFileNew を使いたくないこともあります。

たとえば、プログラムが複数のドキュメント テンプレートを持つ場合、CWinApp::OnFileNew 関数を呼び出すプログラムでは、ユーザーに対してドキュメント テンプレートの選択を要求するダイアログが表示されてしまいます。特定の CMultiDocTemplate を使用したい場合はダイアログを表示せずに目的の子ウィンドウを新規作成できることが望まれます。

AppWizard ベースのアプリケーションでは、MDI 子ウィンドウの作成に MFC リファレンスに記載されていない CMultiDocTemplate::OpenDocumentFile 関数を 利用することができます。

手順

  1. アプリケーションの CWinApp 派生クラス (仮に CMyApp とします) に、CMultiDocTemplate オブジェクトのポインタを保存するパブリック メンバ変数を追加。
          class CMyApp : public CWinApp
          {
            ...
           public:
            CMultiDocTemplate* m_pDocTemplate1;
            ...
          }
    
    複数のドキュメント テンプレートを使用する場合、 テンプレートごとに変数を追加してください。
  2. CMyApp::InitInstance 関数において、AddDocTemplate 関数の引数となる CMultiDocTemplate オブジェクトのポインタを手順 1 で用意した変数に保存。
         BOOL CMyApp::InitInstance()
         {
             ...
             m_pDocTemplate1 = new CMultiDocTemplate(IDR_MYTYPE,
                                           RUNTIME_CLASS(CMyDoc),
                                           RUNTIME_CLASS(CMDIChildWnd),
                                           RUNTIME_CLASS(CMyView));
             AddDocTemplate(m_pDocTemplate1);
             ...
           }
    
  3. 保存した変数により CMultiDocTemplate::OpenDocumentFile を指定して呼び出すことで、新規ウィンドウを作成。引数には NULL を指定。以下のサンプル コードは、ビュー ウィンドウに配置したプッシュ ボタン押下により (BN_CLICKED メッセージ ハンドラ)、m_pDocTemplate に基づいたウィンドウを作成するものです。
         void CMyView::OnNewWindowButtonClicked()
         {
             CMyApp* pApp = (CMyApp*)AfxGetApp();
             pApp->m_pDocTemplate1->OpenDocumentFile(NULL);
         }
    
    SDI アプリケーションでは、ドキュメント テンプレートは 1 つだけなので子ウィンドウ作成時にテンプレートを選択するダイアログが表示されることはありませんが、CSingleDocTemplate を利用してウィンドウを作成する場合にも同じ手法が使えます。

関連情報

この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 113257 (最終更新日 1997-12-12) をもとに作成したものです。

Keywords: KBHOWTO VC10 VC15 VC20 VC40 VC41 VC42 VC4x VC50 KB113257
Technology: kbAudDeveloper kbMFC kbVCsearch

inserted by FC2 system