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

解決


質問  2005-04-15 17:23:15  No: 57031  IP: 192.*.*.*

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

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

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

編集 削除
K.  2005-04-15 17:48:06  No: 57032  IP: 192.*.*.*

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

編集 削除
Blue  2005-04-16 00:05:47  No: 57033  IP: 192.*.*.*

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

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

編集 削除
K.  2005-04-16 15:34:09  No: 57034  IP: 192.*.*.*

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

編集 削除
質問  2005-04-18 09:41:50  No: 57035  IP: 192.*.*.*

>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 10:22:47  No: 57036  IP: 192.*.*.*

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

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


> 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 14:20:14  No: 57037  IP: 192.*.*.*

>YuO様

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

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

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

編集 削除