MFC中CFileDialog及SHBrowseForFolder

2023-05-16

         MFC中实现通过按钮来选择文件路径或文件夹路径;


(1)CFileDialog类能够选择文件,并获取其路径(当然也可以通过获取文件路径再去除文件名而获得其所在文件夹路径,前提是需要先选择文件,适用于打开文件然后保存的情况,若直接想选择文件夹作为保存路径则使用SHBrowseForFolder方法)。

        CString savepath;
	CFileDialog dlg(TRUE);
	if (dlg.DoModal()==IDOK)
	{
		savepath=dlg.GetPathName();
		SetDlgItemText(IDC_EDIT1,savepath);
	}
       	else
	{
		MessageBox("文件选择窗体创建失败");
		return ;
	}

(2)SHBrowseForFolder函数能够选择文件夹,并获取其路径。


函数原型

ITEMIDLIST * SHBrowseForFolder(BROWSEINFO  bi);


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(260)常量宏。

lpszTitle:该浏览文件夹对话框的显示文本,用来提示该浏览文件夹对话框的功能、作用和目的。

ulFlags:该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合。

lpfn:应用程序定义的浏览对话框回调函数的地址。当对话框中的事件发生时,该对话框将调用回调函数。该参数可用为NULL。

lParam:对话框传递给回调函数的一个参数指针。

iImage:与选中目录相关的图像。该图像将被指定为系统图像列表中的索引值。


ulFlags使用说明:

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消息给回调函数。

注意:所有标志可以配合使用例如:
BIF_EDITBOX|BIF_RETURNFSANCESTORS

        char szDir[MAX_PATH]={0};
	
	BROWSEINFO bi;
	ITEMIDLIST *pidl = NULL;
	bi.hwndOwner = NULL;
	bi.pszDisplayName = szDir;
	bi.pidlRoot = NULL;
	bi.lpszTitle ="存储路径";
	bi.ulFlags = BIF_RETURNFSANCESTORS;
	bi.lpfn = NULL;
	bi.lParam = 0;
	bi.iImage = 0;

	pidl = SHBrowseForFolder(&bi);
	
	if(NULL == pidl)
		return ;
	if(!SHGetPathFromIDList(pidl,szDir))  
		return ;
	CString savepath(szDir);
	SetDlgItemText(IDC_EDIT1,savepath);



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MFC中CFileDialog及SHBrowseForFolder 的相关文章

  • 如何在单独的线程中创建带有进度条的MFC对话框?

    我的应用程序可能需要一段时间才能连接到数据库 此连接是通过单个库函数调用建立的 即我无法将进度更新放在那里并进行回调或类似的操作 我的想法是在连接到数据库之前在单独的线程中创建一个带有进度条的对话框 该对话框将不断更改进度状态CProgre
  • 支持 IAccesible 接口以在文本编辑器中移动插入符号的正确解决方案是什么?

    我想从头开始实现一个支持 IAccessible 接口的文本编辑器 我正在使用 MFC 和 Win32 API 当记事本等标准文本编辑器中的插入符号位置发生变化时 讲述人 JAWS 等客户端工具将发音与插入符号移动相对应的字母 单词或行 我
  • MFC 将 CMFCToolBar 按钮更改为切换而不是按下/释放?

    我在网上找到一篇文章 说将工具栏按钮设置为保持按下的类型 只需设置一个样式TBBS CHECKBOX在按钮上 但它对我不起作用 它仍然像普通按钮一样工作 我确认样式已设置 在创建之后SetWindowText MFC 向导设置CMainFr
  • 在 Visual Studio 2013 中显示带有偏移量的控件

    最近 我将源代码从 Visual Studio 2010 迁移到 Visual Studio 2013 在 Visual Studio 2013 中构建后 控件将显示有偏移 单击下面的链接查看图像 链接到图像 https i stack i
  • 寻找 C++ 中搜索和替换的圣杯

    最近 我正在寻找一种替换字符串中标记的方法 这本质上是查找和替换 但至少还有一种解决问题的方法 看起来像是相当平庸的任务 我已经提出了几种可能的实现 但从性能的角度来看 它们都不能令人满意 最好的成绩是每次迭代约 50us 这种情况很理想
  • Mfc CComboBoxEx - 如何更改背景颜色

    我有一个派生自 CComboBoxEx 的类 我正在尝试更改背景颜色 我认为它会像 ComboBox 一样工作 使用 SetBkColor 函数 但它不会改变背景颜色 这是我尝试过的 BEGIN MESSAGE MAP CMyComboBo
  • 如何从头开始启动 MFC 应用程序?

    换句话说 来自一个空白的 win32 项目 无向导 这就是我所在的地方 预处理器定义 WIN32 链接器 gt 系统 gt 子系统 控制台 int tmain int nRetCode 0 initialize MFC and print
  • MFC winMain 如何最终进入可执行文件?

    In MFC wWinMain定义于appmodul cpp 据我所知 该文件内置于 mfc90ud dll 中 但是 当我运行我的应用程序时 调用堆栈显示MyApplication exe wWinMain 它是如何采取的wWinMain
  • SetWindowPos() 函数不移动窗口?

    我有一个对话框 我想将其放置在另一个对话框中 并相对于主对话框上的其中一个控件进行定位 void CspAceDlg DrawResultsArea CWnd pTabCtl GetDlgItem IDC BUILDTABS CRect r
  • 具有透明背景的CWnd

    我想创建一个基于 CWnd 的类 它将引入具有透明背景的控件 只要内容是静态的 创建一个控件并用透明背景绘制其内容对我来说没什么大不了的 问题是当我想创建一个内容不断变化的控件时 这是因为我不知道如何用父背景删除控件的内容 一般情况下可能不
  • MFC 控件上的文本 - Unicode 字符(例如日语)被截断

    背景 我正在开发一个 C MFC 应用程序 我们已经将其转换为显示 unicode 字符以支持外语 在大多数情况下 这是成功的并且 unicode 字符显示正确 但我遇到了一个问题 某些控件上的某些文本被截断 Example 在这里 您可以
  • AfxGetAppName() 返回垃圾字符

    我的应用程序中有以下代码行 CString strAppName AfxGetAppName 有时会充满strAppName出现了垃圾字符 我不明白为什么 有人有主意吗 TIA 如果你改变的话这是可能的m pszAppName手动 在应用程
  • 编辑默认工具栏时 Microsoft Visual Studio“未知位图格式”

    我已使用项目创建向导使用 Microsoft 基础类库 MFC 创建了一个应用程序 我创建了一个多文档界面 MDI 应用程序 该向导创建您可以使用的虚拟工具栏和菜单 我扩展了默认工具栏 没有任何问题 但是现在当我尝试通过资源视图编辑它时 我
  • 如何找到激活时打开给定 HMENU 的菜单项(如果有)?

    我想用原型实现一个功能 Locates the menu item of the application which caused the given menu mnu to show up return true if the given
  • 基于 C# .NET 文档的应用程序操作图

    我想开发一个新的应用程序 用户可以在其中创建描述流程的图表 我认为在这种情况下 基于文档的应用程序是我唯一的选择 我熟悉C net C MFC 和J2EE 根据您的经验 实现这一目标的最佳方法是什么 我应该关注哪个平台 图表必须由方框和箭头
  • 实现批量记录获取

    在程序开始时 我需要将数据从 MS Access 数据库 mdb 读取到下拉控件中 这样做是为了每当用户在该控件中键入内容时 应用程序都可以自动完成 不管怎样 从数据库中读取数据花了很长时间 所以我想我应该实现批量行获取 这是我的代码 CS
  • 如何通过MFC将应用程序设置保存到注册表中?

    我有一个由 MFC 项目向导创建的 MFC 应用程序 我想在注册表中保存 读取应用程序设置 所以问了这个question https stackoverflow com questions 1880275 good c registry w
  • Create CFrameWnd 给出了第一次机会异常——为什么?

    我正在尝试使用基于 CFrameWnd 的代码编写一个简单的 MFC 应用程序 该应用程序在可滚动窗口中绘制 下面的代码改编自 Prosise Programming Windows with MFC 第 2 版 第 89ff 页 当我在调
  • 从模态 MFC 表单获取输入信息

    我已经创建了表格CPreparationDlg具有Edit Control 然后我创建了创建模态表单的应用程序 在按 确定 后 我需要将编辑控件中输入的文本读入主程序的变量中 最好的方法是什么 class CPreparationApp p
  • MFC编辑控件更新

    我尝试使用它添加的变量来更新编辑控件的文本 这是一个CString但我失败了 m sNrAuto some text UpdateData TRUE 我也尝试过使用UpdateWindow 但编辑控件仍为空白 我知道我可以使用SetWind

随机推荐

  • 【面试题】N级台阶(比如100级),每次可走1步或者2步,求总共有多少种走法?

    走台阶算法 xff08 本质上是斐波那契数列 xff09 在面试中常会遇到 xff0c 描述就如题目那样 xff1a 总共100级台阶 xff08 任意级都行 xff09 xff0c 小明每次可选择走1步 2步或者3步 xff0c 问走完这
  • Java访问权限修饰符的区别

    Java有四种访问权限 xff0c 其中三种有访问权限修饰符 xff0c 分别为private xff0c public和protected xff0c 还有一种不带任何修饰符 xff1a private Java语言中对访问权限限制的最窄
  • “二分查找”算法的时间复杂度

    算法的时间复杂度无非就是for while等包含起来的基本运算单元的循环次数 1 二分查找 二分查找 xff08 binary search xff09 xff0c 也称作折半查找 xff08 half interval search xf
  • ORA-12547与在 root 下执行 Oracle 程序时找不到 libclntsh.so.11.1解决方案

    在 root 下执行 Oracle 程序时找不到 libclntsh so 11 1时 如图所示libclntsh so 11 1 61 gt not found 解决方法 xff1a locate libclntsh so 11 1 找到
  • 【D3.js】力导向布局 + 圆形图片展示的人物关系

    前言 使用d3的力学图 xff08 力导向图 xff09 与生活中常见的人物关系图结合 xff0c 已经有了很好的例子 xff1a D3 js 进阶系列 2 0 力学图 43 人物关系图 xff0c 博主实现了下面这种样式 xff0c 已经
  • 【Android】adb 查看所有程序包名

    adb shell pm span class hljs keyword list span packages 列出所有的包名 adb shell pm list packages span class hljs label package
  • 【算法】大数乘法问题及其高效算法

    题目 编写两个任意位数的大数相乘的程序 xff0c 给出计算结果 比如 xff1a 题目描述 xff1a 输出两个不超过100位的大整数的乘积 输入 xff1a 输入两个大整数 xff0c 如1234567 和 123 输出 xff1a 输
  • 【算法】如何判断链表有环

    如何判断单链表是否存在环 有一个单向链表 xff0c 链表当中有可能出现 环 xff0c 就像题图这样 如何用程序判断出这个链表是有环链表 xff1f 不允许修改链表结构 时间复杂度O n xff0c 空间复杂度O 1 方法一 穷举遍历 方
  • 【Android】移动端接入Cronet实践

    移动端接入Cronet实践 QUIC协议获取Chromium源码编译CronetAndroid iOS buildsDesktop builds targets the current OS Running the ninja files生
  • Linux系统下安装Java环境

    目录 测试环境 下载JDK 终端模拟软件 安装前准备 tar包的安装方法 tar包的卸载 rpm包的安装方法 rpm包的卸载 测试环境 LInux系统版本 xff1a CentOS 7 64位 终端模拟软件 xff1a Xshell 6 J
  • 【Hexo】Hexo个人博客绑定域名

    Hexo个人博客绑定域名 当我们在用hexo搭建了个人博客之后 xff0c 用username github io访问难免有些奇怪 xff0c 下面就花3分钟时间对如何绑定个人域名进行描述 我这边是在阿里云买的一个域名 xff0c ycbl
  • 生产者消费者的代码实现

    当消费者获得的数据为大写字母时 xff0c 则把大写字母转换成小写字母 xff0c 并显示 xff1b 当消费者获得的数据为小写字母时 xff0c 则把小写字母转换成大写字母 xff0c 并显示 xff1b 当消费者获得的数据为字符0 1
  • 基于RobHess的SIFT图像拼接知识点随笔

    1 SIFT算法具有尺度不变性在于构建的高斯尺度空间 xff1b 2 SIFT算法具有旋转不变性在于特征方向向量 xff1b 3 K d数以图像特征点的128维特征描述子均值为依据进行划分 构建 xff1b 4 特征点匹配是一个图像的所有特
  • 最小二乘法及OpenCv函数

    1 最小二乘法 我们以最简单的一元线性模型来解释最小二乘法 什么是一元线性模型呢 xff1f 监督学习中 xff0c 如果预测的变量是离散的 xff0c 我们称其为分类 xff08 如决策树 xff0c 支持向量机等 xff09 xff0c
  • Linux服务器网络不通情况分析以及常见检查方法

    在实际运维过程中 xff0c 经常会遇到网路不通的问题 xff0c 一般此类网络不通的问题都是业务端到端的排查 本文从后端linux服务器端自查是否服务器问题 通过多年的运维经验总结 xff0c 服务器端问题导致网络不通 xff0c 大致分
  • RANSAC算法实现去除误匹配并计算拼接矩阵-随笔

    1 RANSAC算法实现去除误匹配并计算拼接矩阵流程 1 从样本集中随机抽选一个RANSAC样本 xff0c 即4个匹配点对 xff08 至少4个匹配点对 xff0c 才能计算出3 3变换矩阵 xff09 xff1b 2 计算当错误概率为0
  • linux c++ 服务器端开发面试必看书籍

    由于很多朋友希望加入到Linux c 43 43 服务器端开发的队伍中 xff0c 本人就结合自己的面试经历并整理了自己阅读的相关书籍 xff0c 同大家分享 xff0c 一起进步 人个认为以下是进入这个方向的必看书籍 xff0c 各系列难
  • C++进阶—>const、define和enum的区别和用途

    1 区别 这三种都可以定义常量 define是宏定义 xff0c 编译器不对其进行错误检查 xff0c 在预编译阶段处理 xff0c 没有作用域限制属于全局常量 xff0c 在程序中编译器会对定义的常量名以数值进行替换 xff0c 且每次替
  • MFC中基于OpenCV实现Picture Control控件成像方法

    MFC中基于OpenCV实现Picture Control控件成像方法有两种 xff0c 一种是OpenCV2 2以前版本的绘制 xff0c 另外一种是OpenCV2 2以后版本的绘制 xff08 1 xff09 在OpenCV2 2之前的
  • MFC中CFileDialog及SHBrowseForFolder

    MFC中实现通过按钮来选择文件路径或文件夹路径 xff1b xff08 1 xff09 CFileDialog类能够选择文件 xff0c 并获取其路径 xff08 当然也可以通过获取文件路径再去除文件名而获得其所在文件夹路径 xff0c 前