选择目录对话框和选择文件对话框——CFileDialog
来源:互联网 发布:淘宝靠谱的手工护肤品 编辑:程序博客网 时间:2024/04/29 20:10
网上相关文章很多,现简单整理如下
1、CFileDialog构造函数
1
CFileDialog:CFileDialog(
BOOL
bOpenFileDialog,
2
LPCTSTR
lpszDefExt=NULL,
3
LPCTSTR
lpszFileName=NULL,
4
DWORD
dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
5
LPCTSTR
lpszFilter=NULL,
6
CWnd * pParentWnd=NULL);
bOpenFileDialog:TRUE为打开文件对话框;FALSE为保存文件对话框
lpszDefExt:缺省的扩展名
lpszFileName:缺省显示在文件名组合框的编辑框的文件名,一般可选NULL
dwFlags:对话框风格,一般为OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, 即隐藏只读选项和覆盖已有文件前提示。
类型:
OFN_HIDEREADONLY:隐藏只读选项
OFN_OVERWRITEPROMPT:覆盖已有文件前提
OFN_ALLOWMULTISELECT:允许选择多个文件
OFN_CREATEPROMPT:如果输入的文件名不存在,则对话框返回询问用户是否根据次文件名创建文件的消息框
OFN_FILEMUSTEXIST:只能输入已存在的文件名
OFN_FORCESHOWHIDDEN:可以显示隐藏的文件
OFN_NOREADONLYRETURN:不返回只读文件
OFN_OVERWRITEPROMPT:保存的文件已存在时,显示文件已存在的信息
lpszFilter:文件筛选类型,它指明可供选择的文件类型和相应的扩展名。参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||";文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。
pParentWnd:父窗口指针,一般可选NULL.
2、对话框选项常用属性(实例:dialog)
dialog.m_ofn.lpstrTitle:显示窗口标题。
dialog.m_ofn.lpstrInitialDir:初始化展开路径。
dlg.m_ofn.lpstrFile:默认文件
dlg.m_ofn.lpstrFilter:文件筛选类型,注意与lpszFilter区别,要用"\0",不能用"|"
如:dlg.m_ofn.lpstrFilter="所有文件\0*.*\0图像文件\0*.jpg;*.bmp;*.gif\0\0";
3、对话框常用方法
INT_PTR CFileDialog::DoModal() 显示文件操作对话框,常用返回值:IDOK,点击了打开确定操作 IDCANCEL,取消
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名 如:c:\test\test.txt。注,多文件选择时返回目录名
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CString CFileDialog::GetFileTitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
4、示例——多文件打开操作,获取文件名以“;”分开
01
//本代码测试环境VS2008 c++ MFC
02
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT|OFN_ALLOWMULTISELECT,
03
NULL,
this
);
04
05
dlg.m_ofn.lpstrInitialDir = (BSTR)directoryName;
//设置对话框默认呈现的路径
06
07
CString strFilePath;
08
if
(dlg.DoModal() == IDOK)
09
{
10
CArray<CString, CString> aryFilename;
11
POSITION posFile=dlg.GetStartPosition();
12
while
(posFile!=NULL)
13
{
14
aryFilename.Add(dlg.GetNextPathName(posFile));
15
}
16
for
(
int
i=0;i<aryFilename.GetSize();i++)
17
{
18
if
(strFilePath.GetLength()>0)
19
{
20
strFilePath.AppendChar(
';'
);
//多个文件‘;’分开
21
}
22
strFilePath+= aryFilename.GetAt(i);
23
}
24
}
在MFC编程中经常会需要用到选择目录和选择文件的界面,以下总结一下本人常用的这两种对话框的生成方法:
选择目录对话框
void CDcPackerDlg::OnBnClickedDecgen()
{
char szPath[MAX_PATH]; //存放选择的目录路径
CString str;
ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = szPath;
bi.lpszTitle = "请选择需要打包的目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
if(lp && SHGetPathFromIDList(lp, szPath))
{
str.Format("选择的目录为 %s", szPath);
AfxMessageBox(str);
}
else
AfxMessageBox("无效的目录,请重新选择");
}
选择文件对话框
{
CString strFile = _T("");
CFileDialog dlgFile(TRUE, NULL, NULL, OFN_HIDEREADONLY, _T("Describe Files (*.cfg)|*.cfg|All Files (*.*)|*.*||"), NULL);
if (dlgFile.DoModal())
{
strFile = dlgFile.GetPathName();
}
return strFile;
}
//加载文件按钮
void CDcPackerDlg::OnBnClickedSelectdec()
{
// TODO: Add your control notification handler code here
m_strDescPath = ""; //类的成员变量
//"打开文件"对话框,选择文件,返回其路径
m_strDescPath = BootOpenDialog();
}
- 选择目录对话框和选择文件对话框——CFileDialog
- CFileDialog文件选择对话框
- CFileDialog文件选择对话框
- 选择目录对话框和选择文件对话框
- 选择目录对话框和选择文件对话框
- 选择目录对话框和选择文件对话框
- 选择目录对话框和选择文件对话框
- 选择目录对话框和选择文件对话框
- 选择目录对话框和选择文件对话框
- CFileDialog文件选择对话框使用说明
- CFileDialog弹出文件选择对话框
- 选择文件对话框、保存文件对话框和选择目录对话框
- [MFC]选择目录对话框和选择文件对话框 保存对话框
- [MFC]选择目录对话框和选择文件对话框
- [MFC]选择目录对话框和选择文件对话框(ZZ)
- [MFC]选择目录对话框和选择文件对话框
- [MFC]选择目录对话框和选择文件对话框
- [MFC]选择目录对话框和选择文件对话框
- 以前写的jsp页面内容
- 浅谈如何书写seo网络推广方案
- UIActionSheet 使用
- VC文件读写操作总结
- JSF生命周期简介
- 选择目录对话框和选择文件对话框——CFileDialog
- MonkeyRunner_MonkeyRunner知识点总结
- oracle断电断网出现的问题
- MPI 实现直接选择排序
- 简单、直观的实现优于复杂、难懂的实现,最近开发扑克识别过程的总结
- 以前写的jsp页面
- HDU-1754(线段树入门)
- Android界面嵌入有米广告
- Drupal模块开发注意事项