2016年3月12日土曜日

MFC MDI ドキュメントタイプ選択の画面を出したくない。

MFCのMDIでは拡張子に応じて、ドキュメントタイプを選択して、ドキュメントテンプレートでCDocumentとCViewを開くようになっている。
しかし、空のドキュメントを開かせようとすると、プログラム起動時にドキュメントタイプを選択するダイアログが出てしまう。

これは知らないユーザにとっては何を選択するべきか、判りにくい。

で、空のドキュメントは常にデフォルトのドキュメントタイプを開かせておき、その後、実ファイルを開いた時だけ該当のドキュメントタイプが利用できる様にしたい場合。

拡張子だけで、中身のないファイルを扱えるようにしてあるので、ドキュメントタイプを指定して新規ファイルを作成できなくても問題がないようになっている前提である。ちょっと特殊かもしれないが、とにかく選択ダイアログは判りにくいので表示しない。


CWinApp::InitInstace()
{

   ................

    CMultiDocTemplate* pDocTemplate;
    pDocTemplate = new CMultiDocTemplate(IDR_XXXXXXXXTYPE,
        RUNTIME_CLASS(CXXXXXXXXDoc),
        RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
        RUNTIME_CLASS(CXXXXXXXXView));
    if (!pDocTemplate)
        return FALSE;
    AddDocTemplate(pDocTemplate);

    通常はここに追加のテンプレートを定義するのだが、コマンドラインに指定がなければ追加しない。
    if (strlen(m_lpCmdLine))
    {
        pDocTemplate = new CMultiDocTemplate(IDR_YYYYYYYYTYPE,
            RUNTIME_CLASS(CYYYYYYYYDoc),
            RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
            RUNTIME_CLASS(CYYYYYYYYView2));
        if (!pDocTemplate)
            return FALSE;
        AddDocTemplate(pDocTemplate);
    }
   ................

  pMainFrame->UpdateWindow();
  // このInitInstance()の最後で、追加しなかったドキュメントタイプを追加しておく
    if (!strlen(m_lpCmdLine))
    {
        pDocTemplate = new CMultiDocTemplate(IDR_YYYYYYYYTYPE,
            RUNTIME_CLASS(CYYYYYYYYDoc),
            RUNTIME_CLASS(CChildFrame), // カスタム MDI 子フレーム
            RUNTIME_CLASS(CYYYYYYYYView2));
        if (!pDocTemplate)
            return FALSE;
        AddDocTemplate(pDocTemplate);
    }
}

0 件のコメント:

コメントを投稿