VC++ 打开文件夹,保存文件等对话框的调用
2019独角兽企业重金招聘Python工程师标准>>>
VC++ 打开文件夹,保存文件等对话框的调用
一。打开文件夹:
1。CFileDialog实现
CFileDialog hFileDlg(true,NULL ,
NULL,
OFN_FILEMUSTEXIST | OFN_READONLY | OFN_PATHMUSTEXIST,
TEXT("驱动文件 (*.sys)|*.sys|所有文件(*.*)|*.*|"),
NULL);
if(hFileDlg.DoModal() == IDOK)
{
m_path = hFileDlg.GetPathName();
UpdateData(FALSE);
}
2。API实现
OPENFILENAMEA ofn;
char szFile[260];
ZeroMemory(&ofn, sizeof(ofn));
ofn.lStructSize = sizeof(ofn);
ofn.hwndOwner = NULL;
ofn.lpstrFile = szFile;
ofn.lpstrFile[0] = '\0';
ofn.nMaxFile = sizeof(szFile);
ofn.lpstrFilter = "音频文件\0*.wma\0";
ofn.nFilterIndex = 1;
ofn.lpstrFileTitle = NULL;
ofn.nMaxFileTitle = 0;
ofn.lpstrInitialDir = NULL;
ofn.Flags = 0;
if (GetOpenFileNameA(&ofn)==FALSE)
return S_FALSE;
CString c_save_path=ofn.lpstrFile;
二、保存文件
同上,只不过将“ CFileDialog hFileDlg(true,NULL ”改为“ CFileDialog hFileDlg(false,NULL ”,或者将GetOpenFileNameA改为GetSaveFileNameA,即可。
三、浏览文件夹对话框
//回调函数
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg==BFFM_SELCHANGED||uMsg==BFFM_INITIALIZED)
{
if(uMsg==BFFM_INITIALIZED)
{
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,
LPARAM(lpData));
}
}
return 0;
}
TCHAR chPath[255]; //用来存储路径的字符串
CString strPath = "";
BROWSEINFO bInfo;
GetModuleFileName(NULL,chPath,MAX_PATH);
strPath=chPath;
ZeroMemory(&bInfo, sizeof(bInfo));
bInfo.hwndOwner = m_hWnd;
bInfo.lpszTitle = _T("请选择路径: ");
bInfo.ulFlags = BIF_RETURNONLYFSDIRS|BIF_EDITBOX;
bInfo.lpfn = BrowseCallbackProc;
bInfo.lParam = (LPARAM)strPath.GetBuffer(strPath.GetLength());
LPITEMIDLIST lpDlist; //用来保存返回信息的IDList
lpDlist = SHBrowseForFolder(&bInfo) ; //显示选择对话框
if(lpDlist != NULL) //用户按了确定按钮
{
SHGetPathFromIDList(lpDlist, chPath);//把项目标识列表转化成字符串
strPath = chPath; //将TCHAR类型的字符串转换为CString类型的字符串
m_save_path=strPath;
UpdateData(FALSE);
}
对应事件加入下面代码:
BROWSEINFO BrowseInfo;
memset(&BrowseInfo,0,sizeof(BROWSEINFO));
LPITEMIDLIST pItemID;
BrowseInfo.hwndOwner=NULL;//m_hWnd; //非模态
BrowseInfo.pidlRoot=NULL;
BrowseInfo.ulFlags=BIF_BROWSEINCLUDEFILES;
BrowseInfo.lpfn=NULL;//BrowseCallBackProc;
pItemID=SHBrowseForFolder(&BrowseInfo);
if(pItemID)
{
char szPath[MAX_PATH];
if(SHGetPathFromIDList (pItemID,szPath))
{
IMalloc* pMalloc;
if(SUCCEEDED(::Co GetMalloc_r(1,&pMalloc)))
{
pMalloc->Free(pItemID);
pMalloc->Release();
}
}
m_strDFilePath = szPath; //m_strDFilePath 存储了文件路径
UpdateData(FALSE);
//MessageBox("设置路径成功,图片将存于 "+m_strDFilePath);
}
BROWSEINFO说明
Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。
(1)BROWSEINFO结构
●定义
typedef struct_browseinfo
{
HWND hwndOwner;
LPCITEMIDLIST pidlRoot;
LPSTR pszDisplayName;
LPCSTR lpszTitle;
UINT ulFlags;
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;
●成员变量
hwndOwner:浏览文件夹对话框的父窗体句柄。
pidlRoot:ITEMIDLIST结构的地址,包含浏览时的初始根目录,而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中。该成员变量可以是NULL,在此时桌面目录将被使用。
pszDisplayName:用来保存用户选中的目录字符串的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。
lpszTitle:该浏览文件夹对话框对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。
ulFlags:该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合:
BIF_BROWSEFORCOMPUTER:返回计算机名。除非用户选中浏览器中的一个计算机名,否则该对话框中的“OK”按钮为灰色。
BIF_BROWSEFORPRINTER:返回打印机名。除非选中一个打印机名,否则“OK”按钮为灰色。
BIF_BROWSEINCLUDEFILES:浏览器将显示目录,同时也显示文件。
BIF_DONTGOBELOWDOMAIN:在树形视窗中,不包含域名底下的网络目录结构。
BIF_EDITBOX:浏览对话框中包含一个编辑框,在该编辑框中用户可以输入选中项的名字。
BIF_RETURNFSANCESTORS:返回文件系统的一个节点。仅仅当选中的是有意义的节点时,“OK”按钮才可以使用。
BIF_RETURNONLYFSDIRS:仅仅返回文件系统的目录。例如:在浏览文件夹对话框中,当选中任意一个目录时,该“OK”按钮可用,而当选中“我的电脑”或“网上邻居”等非有意义的节点时,“OK”按钮为灰色。
BIF_STATUSTEXT:在对话框中包含一个状态区域。通过给对话框发送消息使回调函数设置状态文本。
BIF_VALIDATE:当没有BIF_EDITBOX标志位时,该标志位被忽略。如果用户在编辑框中输入的名字非法,浏览对话框将发送BFFM_VALIDATEFAILED消息给回调函数。
lpfn:应用程序定义的浏览对话框回调函数的地址。当对话框中的事件发生时,该对话框将调用回调函数。该参数可用为NULL。
lParam:对话框传递给回调函数的一个参数指针。
iImage:与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。
转载于:https://my.oschina.net/laopiao/blog/91922
VC++ 打开文件夹,保存文件等对话框的调用相关推荐
- 基于matlab 读取文件夹 保存文件夹
mydir='E:'; bw = 'E:'; if mydir(end)~='\' mydir=[mydir,'\']; end DIRS=dir([mydir,'*.txt']); %扩展名 n=l ...
- 【C#控件详解】对话框类控件(打开文件,保存文件,选择字体和颜色)
在实际应用中,我们会用到各种各样的对话框,如打开文件,保存文件,选择字体和颜色等等.本文详细讲解C#中的颜色对话框.打开文件对话框.字体对话框.浏览文件夹对话框和保存文件对话框. 文章目录 1. Co ...
- pyqt5 保存文件夹_PyQt5 文件对话框
PyQt5 支持(本机)文件对话框:打开文件,打开多个文件和保存文件.通过调用 PyQt5 中包含的函数,你将获得默认文件对话框,你无需从头开始重新创建这些对话框.你需要导入 QFileDialog. ...
- #窗体整人小程序_Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧
Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧 前景提要 在之前,我们学习了如何通过对话框的形式来打开文件的方法,这种方法的好处就是两个字:灵活,我们不用在代码中强制指定必须在某个文 ...
- python 遍历文件夹下文件修改并保存_利用python完成自动化的任务之遍历文件夹修改文件之后并保存备份...
#利用python完成自动化的任务 #遍历文件夹里面的所有的内容--然后打开---利用正则表达式修改文本的内容(re.sub)---然后写入到新的文本内容中 import docx import re ...
- QQ个人文件夹保存位置无效
必须写文章谴责QQ这种垃圾软件 B 了 dog,腾讯家的QQ真没几个好用的.之前是PC版QQ群文件跳转回来显示错误bug,之后是手机QQ看点等各种消息bug,现在隔了几年了还有"个人文件夹保 ...
- 整理文件夹保存同一目录,并统一重命名文件夹名
在自已的电脑上储存了很多文件,虽然不是特别重要的,但是也不能直接删除,想要整理,但又不知道如何整理,下面教大家将文件夹保存同一目录,并统一重命名这些文件夹.一起来看操作步骤. 需要准备哪些工具: 下载 ...
- python pyqt5 打开文件夹 读取文件列表
成员变量初始化 def __init__(self, parent=None):super().__init__(parent)self.file_paths = [] # 文件列表self.file ...
- ubuntu设置鼠标单击打开文件夹或者文件
一般是默认是双击打开文件(夹),但在linux下,单击更爽! ubuntu设置鼠标单击打开文件夹或者文件,这样可以减少按鼠标的次数,让你的鼠标用得更久.试试吧!挺实用的哦!单击一下就能打开文件或者文件 ...
- 文本编辑器实现打开文件、保存文件、文件另存为、新建文件、软件关闭的功能
文章目录 1 文本编辑器实现打开文件.保存文件.文件另存为.新建文件.软件关闭的功能 1.1 打开文件 1.2 保存文件 1.3 文件另存为 1.4 新建文件 1.5 软件关闭 1 文本编辑器实现打开 ...
最新文章
- 编程之美2.12 快速寻找满足条件的两个数
- 【源码解析】hashMap源码跟进
- 计算机网络应用基础第一章试题,计算机网络应用基础第一章测试题
- SVN在另类环境中实现自动提交的方法
- 如何使用 kubectl 通过命令行的方式操作 SAP Kyma
- spring 开发环境_设置Spring 3开发环境
- [导入]ASP.NET 配置节架构
- 二叉查找树与平衡二叉树【转载】
- java 读取resources_java读取Resources下文件
- some blogs for xna 3d game for windows phone!
- javascript 基础之事件(event)-------1
- 如何区分abcd类地址_ip地址abc类怎么区分
- 邱昭良:“碎片化”学习真是“一场骗局”吗?
- android相机网格,Android – 在相机上显示网格线
- 软考高项(信息系统项目管理师)考试资料汇总和学习方法总结
- 【Oracle】基础语句
- DevOps之自动化测试
- 国企招聘计算机专业的技能要求,为何很多国企招聘时,要求“重点大学”学历,3点原因学生要明白...
- ps cs6导出html,Photoshop cs6导出和载入笔刷方法介绍
- Python爬取微信公众号历史文章进行数据分析,发现2017年运营总结,可以这样写!...