ファイルの保存ダイアログでの入力ファイル名制限について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
wasawasa
記事: 94
登録日時: 11年前

ファイルの保存ダイアログでの入力ファイル名制限について

#1

投稿記事 by wasawasa » 11年前

こんにちは、何度もお世話になっております。
WinAPIでGetSaveFileName()の使い方を学ぶためにhttp://wisdom.sakura.ne.jp/system/winapi/common/common6.htmlから下記のソースコードを拾ってきて試したのですが、その際に気になる事があったので質問させて頂きます。
hogehoge.txtがあるフォルダにファイルを保存する場合に、「hogehoge.txt」とファイル名を指定して保存しようとすると「上書きしますか」という旨の確認をするダイアログが表示されますが、保存するファイル名を「hogehoge」と指定した時にも上書き確認用のダイアログが表示されるようにしたいと思いました。
そこでOPENFILENAME構造体について調べたところ、ファイル選択ダイアログに入力されるファイル名及びファイルパスの制限はGetSaveFileName()で使用するOPENFILENAME構造体のFlagsに指定された定数によって決まるという事と、Flagsに指定されているOFN_OVERWRITEPROMPTによって既存ファイル保存時のメッセージボックスが表示されるという事が分かりましたが、上記のような動作をさせるには至りませんでした。
そこでお聞きしますが、OPENFILENAME構造体の操作だけで上記のような動作をさせる事は可能なのでしょうか?どなたかよろしくお願いします。

コード:

#include <windows.h>
#define TITLE TEXT("Kitty on your lap")

LRESULT CALLBACK WndProc(HWND hWnd , UINT msg , WPARAM wp , LPARAM lp) {
	static OPENFILENAME ofn = {0};
	static TCHAR strFile[MAX_PATH];

	switch (msg) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	case WM_CREATE:
		ofn.lStructSize = sizeof (OPENFILENAME);
		ofn.hwndOwner = hWnd;
		ofn.lpstrFilter = 	TEXT("Text files {*.txt}\0*.txt\0")
					TEXT("All files {*.*}\0*.*\0\0");
		ofn.lpstrFile = strFile;
		ofn.nMaxFile = MAX_PATH;
		ofn.Flags = OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;
		return 0;
	case WM_RBUTTONUP:
		GetSaveFileName(&ofn);
		SetWindowText(hWnd , strFile);
		return 0;
	}
	return DefWindowProc(hWnd , msg , wp , lp);
}

int WINAPI WinMain(HINSTANCE hInstance , HINSTANCE hPrevInstance ,
			PSTR lpCmdLine , int nCmdShow ) {
	HWND hwnd;
	MSG msg;
	WNDCLASS winc;

	winc.style		= CS_HREDRAW | CS_VREDRAW;
	winc.lpfnWndProc	= WndProc;
	winc.cbClsExtra	= winc.cbWndExtra	= 0;
	winc.hInstance		= hInstance;
	winc.hIcon		= LoadIcon(NULL , IDI_APPLICATION);
	winc.hCursor		= LoadCursor(NULL , IDC_ARROW);
	winc.hbrBackground	= (HBRUSH)GetStockObject(WHITE_BRUSH);
	winc.lpszMenuName	= NULL;
	winc.lpszClassName	= TEXT("KITTY");

	if (!RegisterClass(&winc)) return -1;

	hwnd = CreateWindow(
			TEXT("KITTY") , TITLE ,
			WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			CW_USEDEFAULT , CW_USEDEFAULT ,
			NULL , NULL ,
			hInstance , NULL
	);

	if (hwnd == NULL) return -1;

	while(GetMessage(&msg , NULL , 0 , 0)) {
		TranslateMessage(&msg);
		DispatchMessage(&msg);
	}
	return msg.wParam;
}

sleep

Re: ファイルの保存ダイアログでの入力ファイル名制限について

#2

投稿記事 by sleep » 11年前

コード:

ofn.lpstrDefExt = "txt";
を追加してみてください。

wasawasa
記事: 94
登録日時: 11年前

Re: ファイルの保存ダイアログでの入力ファイル名制限について

#3

投稿記事 by wasawasa » 11年前

sleepさん、返信ありがとうございます。
提示して頂いた一文を加えたら出来るようになりました。
書き込むファイルの拡張子を自分で決めてしまえばいいのですね、ありがとうございました。

閉鎖

“C言語何でも質問掲示板” へ戻る