MFCで、ファイル選択ダイアログを学習します。 開発環境は、Visual Studio 2015 Communityです。
■単一選択ダイアログと複数選択ダイアログを作成します。
(1) ダイアログベースでプロジェクトを作成し、次のようなダイアログを作成します。
(2) エディットボックスには、m_xvEditFile
の変数を追加します。
(3) リストボックスには、m_xcListFile
の変数を追加します。
(4) ボタンには、それぞれ、ボタンクリックイベントハンドラを追加します。
単一ファイル参照用のイベントハンドラメソッドには、以下のように記載してください。
void CFileSelectDialogsDlg::OnBnClickedButton1() { CString filter("JPEG Files (*.jpg;*.jpeg)|*.jpg; *.jpeg||"); CFileDialog selDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, filter); if (selDlg.DoModal() == IDOK) { m_xcListFile= selDlg.GetPathName(); UpdateData(FALSE); } return; }
複数ファイル参照用のイベントハンドラメソッドには、以下のように記載してください。
void CFileSelectDialogsDlg::OnBnClickedButton2() { CString filter("JPEG Files (*.jpg;*.jpeg)|*.jpg; *.jpeg||"); CString filePath, strBuf; POSITION pos = NULL; CFileDialog selDlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_ALLOWMULTISELECT, filter); int err = 0, lbErr = 0; // ファイル名リスト用メモリ確保 if (!err) { try { selDlg.GetOFN().lpstrFile = strBuf.GetBuffer(MAX_PATH * 100); selDlg.GetOFN().nMaxFile = MAX_PATH * 100; } catch (...) { err = 1; } } if (!err) if (selDlg.DoModal() != IDOK) err = 1; if (!err) if ((pos = selDlg.GetStartPosition()) == NULL) err = 1; if (!err) { while (pos) { filePath = selDlg.GetNextPathName(pos); if (!err) { lbErr = m_xcListFile.InsertString(-1, filePath); if (lbErr == LB_ERR || lbErr == LB_ERRSPACE) err = 1; } if (err) break; } UpdateData(FALSE); } strBuf.ReleaseBuffer(); return; }
以下のように、表示されれば、成功です。
<単一ファイル参照用のダイアログボックス表示>
<複数ファイル参照用のダイアログボックス表示>
<ファイル参照結果>
■本ページの記載は、以下のホームページを参考にしました。 ありがとうございます。
http://www.g-ishihara.com/mfc_cd_01.htm
■CFileDialog クラスのドキュメントは、以下でCFileDialog
で、検索してください。