c++ CFileDialog mfc 实践

例子 

CFileDialog openDlg( TRUE, 
    "Material File(*.material)|*.material",
     NULL,
    OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
    "Material File(*.material)|*.material||", 
    this);

原型 

CFileDialog::CFileDialog( 
    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 指明一些特定风格。 (默认OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT)
lpszFilter 为父窗口指针。
pParentWnd为父窗口指针。

扩展名

扩展名应遵循下面的格式:

"Chart Files (*.xlc)|*.xlc| Worksheet Files (*.xls)|*.xls| Data Files (*.xlc;*.xls)|*.xlc ; *.xls| All Files (*.*)|*.*||";

文件类型说明和扩展名间用 | 分隔,同种类型文件的扩展名间可以用 ; 分割,每种文件类型间用 | 分隔,末尾用 || 指明。

另外过滤器也可以这样设置:dl.m_ofn.lpstrFilter = _T("xls文件\0*.xls\0csv文件\0*.csv\0xlsx文件\0*.xlsx\0\0");

注意有时候用 | 字符分隔时会出现错误,这时候可以使用 \0 字符

接口

CString GetPathName( )得到完整的文件名,包括目录名和扩展名如:c:/test/test1.txt
CString GetFileName( )得到完整的文件名,包括扩展名如:test1.txt
CString GetExtName( ) 得到完整的文件扩展名,如:txt
CString GetFileTitle ( )得到完整的文件名,不包括目录名和扩展名如:test1
POSITION GetStartPosition( ) 对于选择了多个文件的情况得到第一个文件位置。
CString GetNextPathName( POSITION& pos ) 对于选择了多个文件的情况得到下一个文件位置,同时返回当前文件名。但必须已经调用过POSITION CFileDialog::GetStartPosition( )来得到最初的POSITION变量。

 mfc实践

效果

关键代码 

void CMfcDlg::OnButton1() 
{
	TCHAR			szFolderPath[MAX_PATH] = {0};
	CString			strFolderPath = TEXT("");
	
	// TODO: Add your control notification handler code here
	BROWSEINFO		sInfo;
	::ZeroMemory(&sInfo, sizeof(BROWSEINFO));
	sInfo.pidlRoot   = 0;
	sInfo.lpszTitle   = _T("请选择一个文件夹:");
	//sInfo.ulFlags   = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE | BIF_EDITBOX;
	sInfo.lpfn     = NULL;
	
	// 显示文件夹选择对话框
	LPITEMIDLIST lpidlBrowse = ::SHBrowseForFolder(&sInfo); 
	if (lpidlBrowse != NULL)
	{
		// 取得文件夹名
		if (::SHGetPathFromIDList(lpidlBrowse,szFolderPath))  
		{
			strFolderPath = szFolderPath;
		}
	}
	if(lpidlBrowse != NULL)
	{
		::CoTaskMemFree(lpidlBrowse);
	}
	
}

void CMfcDlg::OnButton2() 
{
	// TODO: Add your control notification handler code here
	// TODO: Add your control notification handler code here   
    // 设置过滤器   
    TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");   
    // 构造打开文件对话框   
    CFileDialog fileDlg(TRUE, _T("txt"), NULL, 0, szFilter, this);   
    CString strFilePath;   
	
    // 显示打开文件对话框   
    if (IDOK == fileDlg.DoModal())   
    {   
        // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里   
        strFilePath = fileDlg.GetPathName();   
        SetDlgItemText(IDC_EDIT1, strFilePath);   
    }   
}

void CMfcDlg::OnButton3() 
{
	// TODO: Add your control notification handler code here
	static char BASED_CODE szFilter[] = "Worksheet Files (*.xls)|*.xls||";
	CFileDialog dlg(FALSE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,NULL);
	
	dlg.DoModal();
	CString str=dlg.GetPathName();
	CString filename=dlg.GetFileName();
	SetDlgItemText(IDC_EDIT1, str);
}

void CMfcDlg::OnButton4() 
{
	// TODO: Add your control notification handler code here
	//TCHAR szFilter[] = _T("文本文件(*.txt)|*.txt|所有文件(*.*)|*.*||");
	static char BASED_CODE szFilter[] = "Worksheet Files (*.xls)|*.xls||";
    // 构造打开文件对话框   
    CFileDialog fileDlg(TRUE, _T("xls"), NULL, 0, szFilter, this);   
    CString strFilePath;   
	
    // 显示打开文件对话框   
    if (IDOK == fileDlg.DoModal())   
    {   
        // 如果点击了文件对话框上的“打开”按钮,则将选择的文件路径显示到编辑框里   
        strFilePath = fileDlg.GetPathName();   
        SetDlgItemText(IDC_EDIT1, strFilePath);   
    }   
}

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值