「名前を付けて保存」ウィンドウを表示するには?

解決


質問  2005-04-16 02:23:15  No: 57031

データの保存を行いたいのですが
「名前を付けて保存」ウィンドウにてファイル名を指定しパスを取得するにはどうすればよろしいでしょうか。

よろしくお願い致します。

Visual C++ .net/ダイアログベースです。


K.  2005-04-16 02:48:06  No: 57032

OPENFILENAME構造体に必要事項を設定して、GetOpenFileName()関数を呼び出せばよいはずです。


Blue  2005-04-16 09:05:47  No: 57033

>OPENFILENAME構造体に必要事項を設定して、GetOpenFileName()関数を呼び出せばよいはずです。
GetSaveFileNameなのでは?

MFCを利用しているならば CFileDialog を使うのも手ですね。


K.  2005-04-17 00:34:09  No: 57034

あ、そうですね。
間違えました。


質問  2005-04-18 18:41:50  No: 57035

>K.様  Blue様
ご返答ありがとうございます。
「名前を付けて保存」のウィンドウは下記ソースにて表示出来ましたが
「保存」ボタンをクリックするとエラーになります。
どこが原因なのでしょうか。
また、この作業にて
テキストファイル(中身はtest words)を作成したいと思っております。
宜しくお願い致します。

//以下ソース

char current[ MAX_PATH ];
memset( current, 0, sizeof( current ) );
GetCurrentDirectory( sizeof( current ), current );

char buff[ MAX_PATH ];
memset( buff, 0, sizeof( buff ) );

char* title = "Title";

OPENFILENAME fn;
memset( &fn, 0, sizeof( fn ) );
fn.lStructSize = sizeof( fn );
fn.lpstrFilter = "*.*";
fn.lpstrFile = buff;
fn.nMaxFile = sizeof( buff );
fn.lpstrFileTitle = title;
fn.nMaxFileTitle = sizeof( title );
fn.lpstrInitialDir = current;

GetSaveFileName( &fn ); 

//以上ソース


YuO  2005-04-18 19:22:47  No: 57036

> 「保存」ボタンをクリックするとエラーになります。

どのようなエラーが出るのですか?

> fn.lpstrFilter = "*.*";

フィルタの書式が間違っています。

> fn.lpstrFileTitle = title;
> fn.nMaxFileTitle = sizeof( title );

titleはリテラルを指すポインタですから,
変更がかかるような場合は未定義動作になります。
#たぶん,ここが一番の問題。

そもそも,lpstrFileTitleに初期値を与える事は無意味です。

http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/userinput/commondialogboxlibrary/commondialogboxreference/commondialogboxstructures/openfilename.asp


質問  2005-04-18 23:20:14  No: 57037

>YuO様

ご教授ありがとうございました。
エラーはフィルタの設定によるものでした。

無事に解決致しました。
ありがとうございました。

もう一つお伺いしたいのですが、
メインダイアログのボタンをクリックして
モードレスダイアログを表示し、モードレスダイアログのボタンにて
メインダイアログのボタンを無効(グレーアウト)にするにはどうすればよろしいでしょうか。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加