ファイル選択ダイアログを表示させる方法




Windoowsでよく見かけるファイル選択画面。これって、MFCでは専用のクラスがあって、 それを呼び出すだけで、実現できるのです。

(サンプル)


static char BASED_CODE szFilter[] = "Text Files(*.txt)|*.txt|All Files(*.*)|*.*||";
void CCOMM_SIMView::OnFileSelect() 
{
    // TODO: この位置にコントロール通知ハンドラ用のコードを追加してください


    // ファイルの指定を行う
    CFileDialog dlg( TRUE, NULL, NULL,
                        OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_FILEMUSTEXIST, 
                        szFilter, NULL );
    dlg.m_ofn.lpstrTitle = "WinTail ファイルの選択";

    // OKボタンが押されたかチェックする
    if( dlg.DoModal() == IDOK )
    {
	    // ファイル名称クリア処理
    	memset( E_ReadFileName, NULL, sizeof(E_ReadFileName) );
        // ファイル名を取得する
        strcpy( E_ReadFileName,dlg.GetPathName());
    }
    else
    {
        return;
    }

    // 選択ファイル名を表示する
    m_ReadFile.SetWindowText( (strrchr( E_ReadFileName,'\\'))+1 );
}
サンプルはファイル参照ボタンを押された時にファイル選択ダイアログを表示させて、 ファイルが選択されたなら、ファイル名を取得しています。
ダイアログを開くのがCFlieDialog dlg()という行なのですが、パラメータは私もよく 分かっていません。そのまま、記述して下さい。
ただszFilterというのはファイル選択時の拡張子を指定する時に必要で、ダイアログの 下の方に拡張子選択ドロップダウンリストを表示する時に使っています。
szFilerの定義を見てもらうと、いくつかの項目がパイプで結ばれていて、勘のいい人なら 分かると思いますが、これは、頭から1番目のドロップダウンリスト表示用、1番目の 実際の選択用、2番目の表示用、2番目の実際の選択用・・・と続いていきます。
szFilerはブランクが使えないらしいので注意して下さい。
それと、szFilterはstatic等の静的変数で宣言しなくてはならないようです。
どういう理屈かは知りませんがdlg.m_ofn.lpstrTitleでダイアログのタイトルを指定が できます。
後はDomodal()関数でOKがクリックされたかどうかチェックするだけです。




N総研ソフトウェア開発部のTOPに戻る。

このページに関するご意見・質問は
ドンタコスN村 E-mail:wnaka@coco.ned.co.jp
まで送信してください。