Ufun/Windows/MFC---文件保存(另存为)对话框

方式一:ufun函数

                 

		/*-------------文件保存对话框----------------*/
		//方式一: UFUN函数
		char* prompt_string = "保存";//标准提示文本
		char* title_string = "保存";//文件对话框标题
		char* FILTER_STRING = ".txt";//指定文件类型
		char* DEFAULT_NAME = "test.txt";//默认文件名,用于初始化选择
		char* filename;//用户选择的文件名
		int nResponse;//对话框响应 UF_UI_OK: 确定 UF_UI_CANXEL: 取消
		UF_UI_create_filebox(prompt_string, title_string, FILTER_STRING, DEFAULT_NAME, filename, &nResponse);
		if (nResponse == UF_UI_OK)
		{
			print(filename, 1);//打印保存的的文件名
		}
		else
		{
			print("用户选择了取消", 1);
		}

运行结果如下所示: 

缺点:该函数不支持多种文件类型的选择  。如果有需要,可以使用ug10.0及其以上的版本中的ufun函数UF_UI_create_filebox_with_multiple_filters,具体不作讲解。

方式二:Windows API

 

	//方式二: widows API
	OPENFILENAME ofn;			// 公共对话框结构
	TCHAR szFile[MAX_PATH];		// 保存获取文件名称的缓冲区   
	ZeroMemory(&ofn, sizeof(OPENFILENAME));
	ofn.lStructSize = sizeof(OPENFILENAME);
	ofn.hwndOwner = NULL;
	ofn.lpstrFile = szFile;
	ofn.lpstrFile[0] = '\0';
	ofn.nMaxFile = sizeof(szFile);
	ofn.lpstrFilter = ".xls\0*.xls\0.xlsm\0*.xlsm\0"; //过滤规则
	ofn.nFilterIndex = 1;
	ofn.lpstrFileTitle = NULL;
	ofn.nMaxFileTitle = 0;
	ofn.lpstrInitialDir = "";	//指定默认路径
	ofn.Flags = OFN_SHOWHELP | OFN_OVERWRITEPROMPT;

	if (GetSaveFileName(&ofn))
	{ 
		return ofn.lpstrFile;//返回文件名
	}
	else
	{
		return "";
	}

 运行结果如下所示:

需要注意的是: 首先需要在代码中添加Windows.h头文件,其次需要链接所需的库文件----在项目属性中设置链接器中附属依赖项添加comdlg32.lib。

缺点:该文件对话框比较落后,无法获取文件后缀名,同时无法设置默认文件名,不推荐使用。

方式三:MFC CFileDialog类

		//方式三: MFC CFileDialog类
		// 构造保存文件对话框   
		BOOL bOpenFileDialog;//指定要创建的文件对话框的类型。设为TRUE将创建打开文件对话框,FALSE为创建保存文件对话框。
		LPCTSTR lpszDefExt = L".xls";//默认的文件扩展名
		LPCTSTR lpszFileName = L"默认文件名";//文件名编辑框中显示的初始文件名。如果为NULL,则不显示初始文件名。
		DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT;
		TCHAR szFilter[] = _T("Excel文件(*.xls)|*.xls|Excel 2007 启用宏的工作簿(*.xlsm)|*.xlsm|");//设置文件选择类型
		CFileDialog fileDlg(FALSE, lpszDefExt, lpszFileName, dwFlags, szFilter);
		string strFilePath;

		// 显示保存文件对话框   
		if (IDOK == fileDlg.DoModal())
		{
			// 如果点击了文件对话框上的“保存”按钮,则将选择的文件路径显示到编辑框里   
			//strFilePath = fileDlg.GetPathName();//绝对路径
			//print(strFilePath, 2);
			//strFilePath = fileDlg.GetFileName();//文件名加后缀
			//print(strFilePath, 2);
			//strFilePath = fileDlg.GetFileExt();//文件类型->后缀
			//print(strFilePath, 2);
			//strFilePath = fileDlg.GetFileTitle();//文件名不带后缀
			//print(strFilePath, 2);

		}
		else
		{
			strFilePath = "";
		}

  运行结果如下所示:

值得注意的是:

    添加头文件afxdlgs.h,且一定要添加在所有包含了宏_WINDOWS_的头文件的前面,如果还是出现重复包含Windows.h头文件,可以删除项目属性里的预处理器定义中的_USRDLL。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值