怎样让CFileDialog能同时选择文件夹与文件

zhourj1994 2014-12-04 11:50:04

这种效果
...全文
225 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhourj1994 2014-12-05
  • 打赏
  • 举报
回复
自顶......
jacksonfan 2014-12-05
  • 打赏
  • 举报
回复
CFileDialog filedlg(TRUE); filedlg.m_ofn.Flags = OFN_ALLOWMULTISELECT | OFN_EXPLORER;
xiaohuh421 2014-12-05
  • 打赏
  • 举报
回复
定制的意思就是自已完全重新写一个Dialog, 里面有显示文件列表的功能(网上有很多文件资源管理器源码), 然后你想做什么, 就可以随你了.
zhourj1994 2014-12-05
  • 打赏
  • 举报
回复
问题就是想知道怎样定制
zhourj1994 2014-12-05
  • 打赏
  • 举报
回复
引用 4 楼 xiaohuh421 的回复:
系统默认的, 不支持. 唯有自己定制了.
问题就是想知道怎样定制
zhourj1994 2014-12-05
  • 打赏
  • 举报
回复
引用 4 楼 xiaohuh421 的回复:
系统默认的, 不支持. 唯有自己定制了.
问题就是想知道怎样定制
xiaohuh421 2014-12-05
  • 打赏
  • 举报
回复
系统默认的, 不支持. 唯有自己定制了.
「已注销」 2014-12-04
  • 打赏
  • 举报
回复
樓上答非所問,這個只能選擇文件,不能只選擇文件夾或文件和文件夾。
笨笨仔 2014-12-04
  • 打赏
  • 举报
回复
关于CFileDialog选择多个文件的解释,直接截图了

MFC打开文件文件 一、利用API实现打开文件对话框和利用MFC来实现打开文件对话框。 方法一:API部分: // OPENFILENAME ofn; // TCHAR szFile[MAX_PATH]; // ZeroMemory(&ofn,sizeof(ofn)); // ofn.lStructSize = sizeof(ofn); // ofn.lpstrFile = szFile; // ofn.lpstrFile[0] = TEXT('/0'); // ofn.nMaxFile = sizeof(szFile); // ofn.lpstrFilter = TEXT("all/0*.*/0jpg/0*.jpg/0bmp/0*.bmp/0"); //定义三个选项,all,text和exe // ofn.nFilterIndex = 1; //定义首选项是哪一个 // ofn.lpstrFileTitle = NULL; // ofn.nMaxFileTitle = 0; // ofn.lpstrInitialDir = NULL; // ofn.Flags = OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_FILEMUSTEXIST; // if(GetOpenFileName(&ofn)) // { // ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,szFile); // } 方法二、MFC实现 // CFileDialog dlg(TRUE, NULL, NULL, // OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, // NULL); // // if(dlg.DoModal() == IDOK) // { // szFilename = dlg.GetPathName(); // ::MessageBox(NULL,szFilename,NULL,MB_OK); // } 注意:打开文件的方式和打开文件的方式是不同的。打开文件的方式是不断的打开直到出现末端为文件,否则遇到文件还要继续打开。而打开文件则是只要选择到一个路径的文件就打开。 下面的这种方式是打开文件:MFC实现。 static TCHAR strDirName[MAX_PATH]; BROWSEINFO bi; CString szString = TEXT("选择一个源文件文件"); bi.hwndOwner = ::GetFocus(); bi.pidlRoot = NULL; bi.pszDisplayName = strDirName; bi.lpszTitle = szString; bi.ulFlags = BIF_BROWSEFORCOMPUTER | BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS; bi.lpfn = NULL; bi.lParam = 0; bi.iImage = 0; LPITEMIDLIST pItemIDList = ::SHBrowseForFolder(&bi); if(pItemIDList == NULL) { return ; } ::SHGetPathFromIDList(pItemIDList, strDirName); CString str = strDirName; if(str != "" && str.Right(1) != '//') str += '//'; ::SetDlgItemText(this->m_hWnd,IDC_EDIT1,str);
【前言】 工作或学习中可能需要实现基于VC读\写Excel文件的功能,本人最近也遇到了该问题。中间虽经波折,但是最终还是找到了解决问题的办法。 在此跟大家分享,希望对跟我同样迷茫过的同学们有所帮助。 1、程序功能 1)打开一个excel文件; 2)显示到CListCtrl上; 3)新建一个Excel文件。 以上均在对话框中实现。 2、平台 VC++2010 3、实现方法 常用的Excel打开方式有两种 1)通过数据库打开; 2)OLE方式打开。 由于方式1)操作繁琐,经常出现莫名的错误,这里选用方式2). 4、准备步骤 首先新建一个Dialog窗体程序,添加list control和两个按钮 1)将ExcelLib文件拷贝到程序目录下; 2)将Export2Excel.h,Export2Excel.cpp两个文件添加到项目; 3)包含头文件,#include "ExcelLib/Export2Excel.h" 通过以上步骤在程序中引入了可以读取Excle文件的CExport2Excel类; 5、打开excel文件 通过按钮点击打开 void CExcelTestDlg::OnBnClickedButtonOpenExcel() { //获取文件路径 CFileDialog* lpszOpenFile; CString szGetName; lpszOpenFile = new CFileDialog(TRUE,"","",OFN_FILEMUSTEXIST|OFN_HIDEREADONLY,"Excel File(*.xlsx;*.xls)|*.xls;*.xlsx",NULL); if (lpszOpenFile->DoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //打开文件 //文件中包含多个sheet时,默认打开第一个sheet CExport2Excel Excel_example; Excel_example.OpenExcel(szGetName); //获取sheet个数 int iSheetNum = Excel_example.GetSheetsNumber(); //获取已使用表格行列数 int iRows = Excel_example.GetRowCount(); int iCols = Excel_example.GetColCount(); //获取单元格的内容 CString cs_temp = Excel_example.GetText(1,1); //AfxMessageBox(cs_temp); //List control上显示 //获取工作表列名(第一行) CStringArray m_HeadName; m_HeadName.Add(_T("ID")); for (int i=1;iGetItemCount()>0) { m_list.DeleteColumn(0); } //初始化ClistCtrl,加入列名 InitList(m_list,m_HeadName); //填入内容 //第一行是标题,所以从第2行开始 CString num; int pos; for (int row = 2;row<=iRows; row++) { pos = m_list.GetItemCount(); num.Format(_T("%d"),pos +1); m_list.InsertItem(pos,num); for (int colum=1;columDoModal()==IDOK) { szGetName = lpszOpenFile->GetPathName(); SetWindowText(szGetName); delete lpszOpenFile; } else return; //文件全名称 CString csFileName = szGetName; //需要添加的两个sheet的名称 CString csSheetName = "newSheet"; CString csSheetName2 = "newSheet2"; // 新建一个excel文件,自己写入文字 CExport2Excel Excel_example; //新建excel文件 Excel_example.CreateExcel(csFileName); //添加sheet,新加的sheet在前,也就是序号为1 Excel_example.CreateSheet(csSheetName); Excel_example.CreateSheet(csSheetName2); //操作最开始添加的sheet:(newSheet) Excel_example.SetSheet(2); //添加表头 Excel_example.WriteHeader(1,"第一列"); Excel_example.WriteHeader(2,"第二列"); //添加核心数据 Excel_example.WriteData(1,1,"数据1"); Excel_example.WriteData(1,2,"数据2"); //保存文件 Excel_example.Save(); //关闭文件 Excel_example.Close(); } 7、注意事项 1)一般单个Excel文件包含多个sheet,程序默认打开第一个; 2)指定操作sheet,使用Excel_example.SetSheet(2)函数; 3)打开文件时最左侧的sheet序号为1,新建excel时最新添加的sheet序号为1. 【后记】 本程序主要基于网络CSDN中---“Excel封装库V2.0”---完成,下载地址是:http://download.csdn.net/detail/yeah2000/3576494,在此表示感谢!同时, 1)在其基础上作了小改动,改正了几个小错误,添加了几个小接口; 2)添加了如何使用的例子,原程序是没有的; 3)详细的注释 发现不足之处,还请大家多多指教!
觉得可以作为平常的参考,对初学者或许有点帮助吧 内容: 第一章 窗口的动画效果 带有工具栏的对话框 单文档启动界面 实现全屏显示 实现透明窗体 为对话框程序制作真彩色启动界面 为对话框添加右键菜单 为应用程序添加多语言菜单 隐藏应用程序在任务栏上的显示 在窗口中使用多个视图类 动态切分窗口 第二章 捕获鼠标绘图 捕捉屏幕图像 获取屏幕上颜色 界面上实现3D文字 列举当前系统的字体 判知BMP图片的大小 图片的伸缩显示 显示资源位图 游览大图 第三章 CArray类的应用 CListCtrl 控件的应用 IP Address控件编辑IP地址 Slider控件的应用 动态创建文本框控件 改变控件的字体颜色 用CColorDialog选择颜色 用CFileDialog选择文件 用静态标签控件显示当前时间 字符串的查找和提取 第四章 ActiveX连接数据库 ADO控制Access数据库 基于单文档的数据库浏览 用DAO在数据库中执行SQL语句 在程序中创建ODBC数据源 第五章 VC实现Flash动画播放 VC实现WAV文件播放器 创建CD播放器 利用VC实现OPENGL编程 用playsound播放声音文件 用VC制作简单AVI文件播放器 第六章 获取网卡地址 自动升级程序 获得主机名和IP地址 端口扫描程序 在IE工具栏中加入快捷图标 简单浏览器开发 FTP客户端开发 一种简单的proxy程序 聊天室客户端程序开发 聊天室服务器端开发 第七章 报表与打印演示 程序互斥运行 定时关机 读写INI文件 删除目录及子目录文件 文件查找 文件分割 文件加密 文件浏览器 用树型控件列出文件 第八章 cdrom控制 cpu和mouse信息 USB编程 测试cpu速度 检测键盘按键 列出进程 鼠标钩子编程 系统信息获取 注册表编程 第九章 CHM COM编程获取表单域信息 SMTP客户端程序 五子棋游戏 学生成绩管理系统

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧