[MFC]ファイルオープンダイアログ | Assertion Failed!

[MFC]ファイルオープンダイアログ

ファイルを開くダイアログの表示



Assertion Failed!-ファイルオープンダイアログ


[作成環境]

・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はさわってないので修正コードはいずれ。