CFileDialog _dlgFile(FALSE, _T("nce"), _GETCS(s_szNOTITLE),OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,|*.nce|, AfxGetMainWnd(),0);
上述代码为另存为窗口,我设置了nce格式也就是只能保存为.nce格式的文件。
事实上我输入csdn为文件名时确实能保存为csdn.nce文件
但是当我输入csdn.txt时它确保存为csdn.txt,而没有像我想象中的保存为csdn.txt.nce(就是自己把扩展名改为电脑上已知的
扩展名时它就自动保存为那种格式了)
解决方案 »
- CDialogBar上添加Edit控件的问题
- vs2003 中怎么调试 DLL
- *******************求《深入解释MFC》电子书!!!**********
- 有关SetTimer和CallBACK的问题?
- 编译《windows核心编程》第五单源码出现了好多错误!
- 在线等!!如何得到Tree-View节点上的文字!
- 关于线程间发送自定义消息的问题?
- 聘:软件工程师
- 一个简单的数据库问题 一个简单的数据库问题 一个简单的数据库问题 一个简单的数据库问题 一个简单的数据库问题 一个简单的数据库问
- how to install different run.exe ()to taget machine with install shield
- 流媒体是怎么传送数据的?
- skinmagin添加后我原来禁用的退出按钮能用了
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL, CWnd* pParentWnd = NULL );参数意义: bOpenFileDialog 为TRUE则显示打开对话框,为FALSE则显示保存对话文件对话框。
lpszDefExt 指定默认的文件扩展名。
lpszFileName 指定默认的文件名。
dwFlags 指明一些特定风格。 (默认OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)
lpszFilter 指明可供选择的文件类型和相应的扩展名。
pParentWnd 为父窗口指针。其中,扩展名应该遵循以下格式: “Chart Files (*.xlc)|*.xlc| Worksheet Files (*.xls)|*.xls| Data Files (*.xlc;*.xls)|*.xlc ; *.xls| All Files (*.*)|*.*||”;
文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
GetPathName 然后自己拼接字符串才是王道
5樓說的才是道理.
CFileDialog 顯示後,當用戶點了OK键后,
你应该能获取到用户输入的文件名,然后在文件名后辍不是你要的那个,就强行增加后辍,如果是,就不管,再保存
1. 如 ofn.lpstrFilter 指定文件通配符,如“TEXT("Microsoft Word 文档\0*.doc\0\0");”,则当文件未输入扩展名时补 .doc,如用户输入了文件名扩展名,则不会添加 .doc。这种情况下,即使 ofn.lpstrDefExt 参数指定了默认扩展名,也不会添加此扩展名。
2. 如 ofn.lpstrFilter 未指定或者为 0 时,而 ofn.lpstrDefExt 参数指定了默认扩展名,如“TEXT("docx")”,那么无论用户是否输入了扩展名其都很会被追加。如用户输入 a 则返回 a.docx,用户输入 a.xls 则返回 a.xls.docx。但是同样发现了个奇怪现象:用户如输入 a.doc 或 a.docx 则默认扩展名不会被追加,依旧返回 a.doc 或 a.docx,我猜测 MS 只比对了前三个字母(Windows XP SP3)。
3. 手动强制追加扩展名:对于用户输入的不是 docx 扩展名的文件,不论其是否有扩展名,强行追加 docx 扩展名。这种情况下,ofn.lpstrFilter 可指定通配符,但 ofn.lpstrDefExt 参数可以忽略不写。if (GetSaveFileName(&ofn)) {
LPTSTR pszExt = PathFindExtension(szPath);
if (lstrcmpi(pszExt, TEXT(".docx")) != 0) {
TCHAR szNewPath[MAX_PATH];
wsprintf(szNewPath, TEXT("%s%s"), szPath, TEXT(".docx"));
lstrcpy(szPath, szNewPath);
}
MessageBox(hwndDlg, szPath, TEXT("提示"), MB_OK);
}此为 Windows SDK 实现方式,MFC 可参照此方法。