MFCでのプログラミングに関する質問です。
以下の動作を実現させるプログラムを作成しました。
- ダイアログにある参照ボタンをクリックする。
- ファイル保存ダイアログを表示し、任意の場所及びファイル名を指定し、保存ボタンをクリックする。
- 1のダイアログにあるテキストボックスに、指定したファイルのパスを表示させる。
動作は基本的には問題ないのですが、以下のような問題が発生しています。
(1)上記の2で、ファイルのパスをライブラリに指定して保存ボタンをクリックすると、プログラムが強制終了する。
(2)上記の2で、ファイルのパスをライブラリ下のフォルダ(ドキュメント、ピクチャ等)に指定して保存ボタンをクリックすると、テキストボックスにファイル名しか表示されない。
なお、ライブラリやドキュメントなどに作成したフォルダを指定した場合は、動作に問題はありませんでした。
上記の(1)(2)のエラーを回避したいのですが、現状回避方法が定まらず、困っています。
理由として、(1)はデバッグをかけても自作のソースコード内でなく、MFCのプロジェクトで標準であるソースファイルでストップしたためです。
(2)はそもそもデバッグで停止しないので、原因が掴めないためです。
上記(1)(2)のエラーを回避し、ファイル保存ダイアログで指定したファイルパスを表示する方法、または強制終了せずにエラーメッセージを表示する方法がありましたら、ご教授願います。
使用OSはWin7 x86、開発環境はVisual Studio2010 です。
5/30 追記
str1~str4には、多言語対応のため、リソースビューのString Tableで文字列を定義し、そのコードを入力しています。
それぞれで定義している文字列は以下の通りです。
str1: abc
str2: ABC2sABC
str3: ABCファイル (.abc)|.abc||
str4: エクスポート先指定
また、それに伴い、一部簡略化して掲載していたソースコードを、簡略化なしで掲示しました。
###作成したソースコード
void MainWindow::OnBClickedmainwindowpathselect() { CFileDialog dlg(FALSE, str1, str2, OFN_OVERWRITEPROMPT, str3); dlg.m_ofn. lpstrTitle = str4; if(dlg.Domodal() == IDOK){ mainWindowPathInput_default = dlg. GetFolderPath() + _T("\\") + dlg .GetFileName(); UpdateData(FALSE); } }
###ソースコード再掲載(5/30)
void MainWindow::OnBClickedmainwindowpathselect() { //登録コード1-4はString Tableで登録したコードを指しています。 CString str1, str2, str3, str4; str1 = LoadString(登録コード1); str2 = LoadString(登録コード2); str3 = LoadString(登録コード3); str4 = LoadString(登録コード4); CFileDialog dlg(FALSE, str1, str2, OFN_OVERWRITEPROMPT, str3); dlg.m_ofn. lpstrTitle = str4; if(dlg.Domodal() == IDOK){ mainWindowPathInput_default = dlg. GetPathName(); UpdateData(FALSE); } }

回答3件
あなたの回答
tips
プレビュー