[MFC]ファイルオープンダイアログ
ファイルを開くダイアログの表示
[作成環境]
・Visual Studi 2008 Standart Edition
・MFC-ダイアログベース
ボタンとエディットボックスを配置する
<ボタン>
ID:IDC_FILEOPEN
メッセージ:BN_CLICKED
ハンドラ:OnBnClickedFileopen
<エディットボックス>
ID:IDC_FILEPATH
メンバ変数(Value):CString m_FilePath
メッセージ:EN_CHANGE
ハンドラ:OnEnChangeFilepath
void CFileOpenDlg::OnBnClickedFileopen()
{
// TODO: ここにコントロール通知ハンドラ コードを追加します。
CFileDialog fdlg(TRUE);
if(fdlg.DoModal() == IDOK)
{
m_FilePath = fdlg.GetPathName();
UpdateData(FALSE);
OnEnChangeFilepath();
}
}
void CFileOpenDlg::OnEnChangeFilepath()
{
// TODO: これが RICHEDIT コントロールの場合、
// まず、CDialog::OnInitDialog() 関数をオーバーライドして、OR 状態の ENM_CHANGE
// フラグをマスクに入れて、CRichEditCtrl().SetEventMask() を呼び出さない限り、
// コントロールは、この通知を送信しません。
// TODO: ここにコントロール通知ハンドラ コードを追加してください。
UpdateData(TRUE);
}
CFileDialogクラスのDoModal()を呼ぶと、基本的なファイルダイアログが表示される。
コンストラクタに渡す引数はたくさんあるが、第1引数に渡すBOOL値により
保存か開くかが変わる。
その他の引数はMSDN見るべし。
CFileDialogコンストラクタ 第1引数
TRUE:ファイルを開く
FALSE:ファイルを保存
IDOKが返ってきたら、ファイルパスを取得して、エディットボックスの
コントロール変数に突っ込み、更新。
コレによりエディットボックスは更新されるが、更新通知のメッセージは
投げられないようなので、自分で投げる。
処理によっては投げる必要はないが、処理しだいでは使うこともある。
(09/03/15追記)
イベントハンドラを直書きするのはよろしくないですね。
その後いろいろ勉強してますゆえ。
でも最近MFCはさわってないので修正コードはいずれ。