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++ 打开文件夹,保存文件等对话框的调用相关推荐

  1. 基于matlab 读取文件夹 保存文件夹

    mydir='E:'; bw = 'E:'; if mydir(end)~='\' mydir=[mydir,'\']; end DIRS=dir([mydir,'*.txt']); %扩展名 n=l ...

  2. 【C#控件详解】对话框类控件(打开文件,保存文件,选择字体和颜色)

    在实际应用中,我们会用到各种各样的对话框,如打开文件,保存文件,选择字体和颜色等等.本文详细讲解C#中的颜色对话框.打开文件对话框.字体对话框.浏览文件夹对话框和保存文件对话框. 文章目录 1. Co ...

  3. pyqt5 保存文件夹_PyQt5 文件对话框

    PyQt5 支持(本机)文件对话框:打开文件,打开多个文件和保存文件.通过调用 PyQt5 中包含的函数,你将获得默认文件对话框,你无需从头开始重新创建这些对话框.你需要导入 QFileDialog. ...

  4. #窗体整人小程序_Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧

    Excel VBA和文件夹-1.8通过对话框灵活选定文件的小技巧 前景提要 在之前,我们学习了如何通过对话框的形式来打开文件的方法,这种方法的好处就是两个字:灵活,我们不用在代码中强制指定必须在某个文 ...

  5. python 遍历文件夹下文件修改并保存_利用python完成自动化的任务之遍历文件夹修改文件之后并保存备份...

    #利用python完成自动化的任务 #遍历文件夹里面的所有的内容--然后打开---利用正则表达式修改文本的内容(re.sub)---然后写入到新的文本内容中 import docx import re ...

  6. QQ个人文件夹保存位置无效

    必须写文章谴责QQ这种垃圾软件 B 了 dog,腾讯家的QQ真没几个好用的.之前是PC版QQ群文件跳转回来显示错误bug,之后是手机QQ看点等各种消息bug,现在隔了几年了还有"个人文件夹保 ...

  7. 整理文件夹保存同一目录,并统一重命名文件夹名

    在自已的电脑上储存了很多文件,虽然不是特别重要的,但是也不能直接删除,想要整理,但又不知道如何整理,下面教大家将文件夹保存同一目录,并统一重命名这些文件夹.一起来看操作步骤. 需要准备哪些工具: 下载 ...

  8. python pyqt5 打开文件夹 读取文件列表

    成员变量初始化 def __init__(self, parent=None):super().__init__(parent)self.file_paths = [] # 文件列表self.file ...

  9. ubuntu设置鼠标单击打开文件夹或者文件

    一般是默认是双击打开文件(夹),但在linux下,单击更爽! ubuntu设置鼠标单击打开文件夹或者文件,这样可以减少按鼠标的次数,让你的鼠标用得更久.试试吧!挺实用的哦!单击一下就能打开文件或者文件 ...

  10. 文本编辑器实现打开文件、保存文件、文件另存为、新建文件、软件关闭的功能

    文章目录 1 文本编辑器实现打开文件.保存文件.文件另存为.新建文件.软件关闭的功能 1.1 打开文件 1.2 保存文件 1.3 文件另存为 1.4 新建文件 1.5 软件关闭 1 文本编辑器实现打开 ...

最新文章

  1. 编程之美2.12 快速寻找满足条件的两个数
  2. 【源码解析】hashMap源码跟进
  3. 计算机网络应用基础第一章试题,计算机网络应用基础第一章测试题
  4. SVN在另类环境中实现自动提交的方法
  5. 如何使用 kubectl 通过命令行的方式操作 SAP Kyma
  6. spring 开发环境_设置Spring 3开发环境
  7. [导入]ASP.NET 配置节架构
  8. 二叉查找树与平衡二叉树【转载】
  9. java 读取resources_java读取Resources下文件
  10. some blogs for xna 3d game for windows phone!
  11. javascript 基础之事件(event)-------1
  12. 如何区分abcd类地址_ip地址abc类怎么区分
  13. 邱昭良:“碎片化”学习真是“一场骗局”吗?
  14. android相机网格,Android – 在相机上显示网格线
  15. 软考高项(信息系统项目管理师)考试资料汇总和学习方法总结
  16. 【Oracle】基础语句
  17. DevOps之自动化测试
  18. 国企招聘计算机专业的技能要求,为何很多国企招聘时,要求“重点大学”学历,3点原因学生要明白...
  19. ps cs6导出html,Photoshop cs6导出和载入笔刷方法介绍
  20. Python爬取微信公众号历史文章进行数据分析,发现2017年运营总结,可以这样写!...

热门文章

  1. Karpathy更新深度学习开源框架排名:TensorFlow第一,PyTorch第二
  2. 不惧困难,阿特拉斯机器人展示超强平衡能力
  3. openssl实现CA自签证书和颁发数字证书
  4. Android 启动模式简介
  5. Spring3.x事务失效的原因以及解决办法
  6. HBA and WWN
  7. 学习笔记:部署趋势科技企业安全无忧版——服务器端和web控制台的安装(一)...
  8. 升级CommunityServer2.0出现的两个问题的解决方法
  9. puppet 自定义facter
  10. 某企业生产系统升级Linux系统及内核