cfiledialog
范例1 打开文件对话框
CString FilePathName;//文件名参数定义
cfiledialog Dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,"TXT Files(*.txt)|*.txt|All Files(*.*)|*.*");
//打开文件
if(Dlg.DoModal() == IDOK)//是否打开成功
{
FilePathName = Dlg.GetPathName();//取得文件路径及文件名
SetDlgItemText(IDC_OutPutFile,FilePathName);
}
上的程序就是处理一个"打开/保存文件对话框"的程序,下面我将分析这段程序,详细的说明各个参数的作用!
个默认文件扩展名
多个默认扩展名:TCHAR szFilter[] = _T("数据库文件(*.mdb;*.mdf)|*.mdb; *.mdf|所有文件(*.*)|*.*||");构造一个对象并提供相应的参数,构造函数原型如下:
CFileDialog Dlg( BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL, Dword dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, LPCTSTR lpszFilter = NULL, CWnd* pparentWnd = NULL );
各个参数的意义说明如下:
bOpenFileDialog 为TRUE则显示打开文件对话框,为FALSE则显示保存文件对话框。
lpszDefExt 指定默认的文件扩展名。
lpszFileName 指定默认的文件名。
dwFlags 指明一些特定风格。
lpszFilter 是最重要的一个参数,它指明可供选择的文件类型和相应的扩展名。
参数格式如:
"Chart Files (*.xlc)|*.xlc|Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|*.xlc; *.xls|All Files (*.*)|*.*||"
说明:文件的类型说明和扩展名间用'|'分隔,同种类型的文件扩展名间用';'分隔,每种文件类型间用'|'分隔,末尾用'||'指明。
pParentWnd 为父窗口指针。
创建文件对话框可以使用DoModal(),在返回后可以利用下面的函数得到用户选择:
CString CFileDialog::GetPathName( ) 得到完整的文件名,包括目录名和扩展名如:c: est est1.txt
CString CFileDialog::GetFileName( ) 得到完整的文件名,包括扩展名如:test1.txt
CString CFileDialog::GetExtName( ) 得到完整的文件扩展名,如:txt
CString CFileDialog::GetFiletitle ( ) 得到完整的文件名,不包括目录名和扩展名如:test1
POSITION CFileDialog::GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString CFileDialog::GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,并同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。
来源: <http://blog.csdn.net/wangjiannuaa/article/details/6301330>
范例2 打开多个文件/*****文件打开对话框*******/
TCHAR* filters = _T("红外图像(*.ird)|*.ird");//过滤器
//文件打开对话框
CFileDialog fileDlg(TRUE,NULL,NULL, OFN_ALLOWMULTISELECT | OFN_ENABLESIZING | OFN_HIDEREADONLY,filters);
//最多可以打开64个文件
fileDlg.m_ofn.nMaxFile = MAX_OPEN_IMAGE_COUNT * MAX_PATH;
TCHAR* pCh = new TCHAR[fileDlg.m_ofn.nMaxFile];
if (NULL == pCh)
{
return;
}
fileDlg.m_ofn.lpstrFile = pCh;
zeromemory(fileDlg.m_ofn.lpstrFile,sizeof(TCHAR) * fileDlg.m_ofn.nMaxFile);//对内存块清零
if(fileDlg.DoModal() == IDOK)
{
POSITION pos_file = fileDlg.GetStartPosition();//获取第一个文件的位置
CString pathName;
while(pos_file != NULL)//循环读出每个路径
{
pathName = fileDlg.GetNextPathName(pos_file);
CIRData* pIRData = m_workSpace.addZsIRData(pathName);
if (pIRData)
{
createAnImageWindow(pIRData);
}
}
//UpdateAllViews(NULL);
}
if (pCh != NULL)
{
delete[] pCh;
pCh = NULL;
}
/***************************/
//保存文件对话框
void COpenSaveFileDialogDlg::OnBnClickedButtonSave()
{
BOOL isOpen = FALSE;//是否打开(否则为保存)
CString defaultDir = L"E:\\FileTest";//默认打开的文件路径
CString fileName = L"test.doc";//默认打开的文件名
CString filter = L"文件 (*.doc; *.ppt; *.xls)|*.doc;*.ppt;*.xls||";//文件过虑的类型
CFileDialog openFileDlg(isOpen, defaultDir, fileName, OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT, filter, NULL);
openFileDlg.GetOFN().lpstrInitialDir = L"E:\\FileTest\\test.doc";
INT_PTR result = openFileDlg.DoModal();
CString filePath = defaultDir + "\\" + fileName;
if(result == IDOK) {
filePath = openFileDlg.GetPathName();
}
CWnd::SetDlgItemTextW(IDC_EDIT_DEST, filePath);
}
文章最后发布于: 2015-07-24 16:31:34
相关阅读
很多程序员都喜欢让自己的代码运行效果与众不同。Windows系统的应用程序打开某个文件一般使用的都是默认的CFileDialog。但是这个
CFileDialog fDlg(TRUE, _TEXT("txt"), NULL, 4|2, _TEXT("文本文件(*.txt,*.ini,*.log)|*.txt;*.ini;*.log|全部文件(*.*)|*.*