VC文件目录选择对话框(任意目录)

2023-11-01

程序运行界面显示如下:

 

 

使用目录选择对话框时,如何让其弹出后自动打开指定目录?

是的当用目录选择对话框时,用如下的结构打开。

以下是代码片段:
typedef struct _browseinfo { 
HWND hwndOwner; 
LPCITEMIDLIST pidlRoot; 
LPSTR pszDisplayName; 
LPCSTR lpszTitle; 
UINT ulFlags; 
BFFCALLBACK lpfn; 
LPARAM lParam; 
int iImage; 
} BROWSEINFO, *PBROWSEINFO, *LPBROWSEINFO;

 

LPCITEMIDLIST pidlRoot; 这个就是 默认为桌面。


还有可以通过这种方式实现,如下:

 

以下是代码片段:
LPMALLOC pMalloc;     
     if ( SUCCEEDED( SHGetSpecialFolderLocation (NULL, CSIDL_DRIVES, &pidl))) 
     { 
         SHELLEXECUTEINFO sei; 
         ZeroMemory(&sei, sizeof(sei)); 
         sei.cbSize = sizeof(sei); 
         sei.fMask = SEE_MASK_IDLIST; 
         sei.lpIDList = pidl; 
         sei.lpVerb = "open"; 
         sei.hwnd = AfxGetMainWnd()->GetSafeHwnd(); 
         sei.nShow = BIF_RETURNONLYFSDIRS; 
         ShellExecuteEx(&sei); 
         if (SUCCEEDED( SHGetMalloc (&pMalloc))) 
         { 
             pMalloc->Free ( pidl ); 
             pMalloc->Release(); 
         } 
     } 

其中://CSIDL_DRIVES是我的电脑
参数有好些,
CSIDL_BITBUCKET 回收站
CSIDL_CONTROLS 控制面板
CSIDL_DESKTOP Windows 桌面Desktop
CSIDL_DESKTOPDIRECTORY Desktop的目录
CSIDL_DRIVES 我的电脑
CSIDL_FONTS 字体目录
CSIDL_NETHOOD 网上邻居
CSIDL_NETWORK 网上邻居虚拟目录
CSIDL_PERSONAL 我的文档
CSIDL_PRINTERS 打印机
CSIDL_PROGRAMS 程序组
CSIDL_RECENT 最近打开的文档
CSIDL_SENDTO “发送到”菜单项
CSIDL_STARTMENU 任务条启动菜单项
CSIDL_STARTUP 启动目录
CSIDL_TEMPLATES 文档模板
还有的看 MSDN吧。

 

 

现在要实现的是打开 如:f:,f://site等这样的目录。

 


很明显这样的字符串是不被支持的,所以必须要转成 LPCITEMIDLIST 这种结构的才支持。


但微软好像没有类似的函数实现这样的功能。于是就写了一个如下:

 

以下是代码片段:
//文件目录转成LPITEMIDLIST
LPITEMIDLIST CTestBrowseDlg::ParsePidlFromPath(LPCSTR path)
{    
    OLECHAR szOleChar[MAX_PATH];    
    LPSHELLFOLDER IpsfDeskTop;    
    LPITEMIDLIST lpifq;    
    ULONG ulEaten, ulAttribs;    
    HRESULT hres;    
    SHGetDesktopFolder(&IpsfDeskTop);    
    MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,path,-1,szOleChar,sizeof(szOleChar));    
    hres = IpsfDeskTop ->ParseDisplayName(NULL, NULL, szOleChar, &ulEaten, &lpifq, &ulAttribs);    
    hres=IpsfDeskTop->Release( );        
    if(FAILED(hres))
        return NULL;
    return lpifq;
}

如这样写:    


方法1:

以下是代码片段:
LPITEMIDLIST pidl; 
    
     LPMALLOC pMalloc; 
     pidl = ParsePidlFromPath("F://site");//请先确定f:下有这个文件夹
     
     SHELLEXECUTEINFO sei; 
     ZeroMemory(&sei, sizeof(sei)); 
     sei.cbSize = sizeof(sei); 
     sei.fMask = SEE_MASK_IDLIST; 
     sei.lpIDList = pidl; 
     sei.lpVerb = "open"; 
     sei.hwnd = AfxGetMainWnd()->GetSafeHwnd(); 
     sei.nShow = BIF_RETURNONLYFSDIRS; 
     ShellExecuteEx(&sei); 
     if (SUCCEEDED( SHGetMalloc (&pMalloc))) 
     { 
         pMalloc->Free ( pidl ); 
         pMalloc->Release(); 
     } 
就可以打开F:/site

 

方法2:
    

以下是代码片段:
CString str;
    BROWSEINFO bi;
    char name[MAX_PATH];
    ZeroMemory(&bi,sizeof(BROWSEINFO));    
    bi.pidlRoot = ParsePidlFromPath("F://");
    bi.hwndOwner=GetSafeHwnd();
    bi.pszDisplayName=name;
    bi.lpszTitle="S浏览文件夹";
    bi.ulFlags=BIF_RETURNONLYFSDIRS; 
    
    LPITEMIDLIST idl=SHBrowseForFolder(&bi);
    if(idl==NULL)
        return;
就能打开f:

 

由于此文章是工作时间仓促写就,所以文辞方面就没考虑,具体的请看源代码。

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

VC文件目录选择对话框(任意目录) 的相关文章

  • 沿着预定路径移动图像?

    是否可以通过按下 iphone SDK 中的按钮来将图像设置为沿着预定路径运动 我不是在寻找任何奇特的东西 我正在研究一个简单的概念 但这会节省大量动画工作 是的 您可以通过创建一个路径来为任何 CALayer 制作动画CAKeyframe
  • ruby rspec 不能与 simplecov 一起使用

    我安装了 simplecov gem 并添加了 require simplecov SimpleCov start 到spec helper rb文件 现在如果我在some file spec rb文件中包含spec helper rb并尝
  • 面向对象编程语言中的引用默认情况下是否应该不可为空? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • Android 和 Java 中绘制椭圆的区别

    在Java中由于某种原因Ellipse2D Double使用参数 height width x y 当我创建一个RectF在Android中参数是 left top right bottom 所以我对适应差异有点困惑 如果在 Java 中创
  • Perl 程序如何知道在哪里可以找到包含它使用的 Perl 模块的文件?

    如果我的 Perl 程序使用 Perl 模块 它将如何确定在哪里找到包含模块代码的文件 例如 如果程序包含 use MyModule1 Example 1 use This Here MyModule2 Example 2 它会看起来在哪里
  • 如何在 TypeScript React 项目中使用 eslint import 插件启用绝对路径别名?

    我已经安装了eslint plugin import到我的项目 我的目标是使用 import no relative parent imports error 设置禁止在我的项目中进行相对导入以增强可读性 但是 此设置会在我的项目中产生错误
  • 嵌套模板类的 C++ 非成员函数

    我一直在编写几个包含嵌套迭代器类的类模板 需要进行相等比较 我认为这是相当典型的 比较是与非会员 和非朋友 进行的operator 功能 这样做时 我的编译器 我使用带有标志的 Mingw32 GCC 4 4 O3 g Wall 未能找到该
  • 连接路径的函数?

    是否有现有的函数来连接路径 我知道实施起来并不困难 但仍然 除了照顾尾随 or 我需要注意正确的操作系统路径格式检测 即我们是否编写C dir file or dir file 正如我所说 我相信我知道如何实施它 问题是 我应该这样做吗 现
  • 何时检查未定义以及何时检查 null

    赏金编辑 我正在寻找一个很好的解释 当你应该设置 使用null or undefined以及您需要在哪里进行检查 基本上这两者的常见做法是什么 真的可以在通用的可维护代码中单独对待它们吗 我什么时候可以安全地检查 null 安全地检查 un
  • 正式来说,typename 是做什么用的? [复制]

    这个问题在这里已经有答案了 有时我会看到一些非常难以理解的错误消息gcc当使用模板时 具体来说 我遇到了一些问题 看似正确的声明导致了非常奇怪的编译错误 通过添加前缀神奇地消失了typename关键字到声明的开头 例如 就在上周 我将两个迭
  • python sys.path 故障排除

    python 文档位于http docs python org library sys html http docs python org library sys html比如说sys path is 从环境变量 PYTHONPATH 以及
  • 如何使用 NextJS 使用自托管字体face?

    使用 NextJS 的字体 我已经阅读了有关如何在 NextJS 中使用自托管字体的不同主题 我得到了什么 wait compiling 当我这样做时 font face font family montserrat src url myp
  • 通过 NULL 指针访问类成员

    我正在尝试 C 发现下面的代码非常奇怪 class Foo public virtual void say virtual hi std cout lt lt Virtual Hi void say hi std cout lt lt Hi
  • 访问默认 lambda 参数中的模板类参数

    我正在写一个简单的通用池 模板类在构造函数中采用一个参数 该参数是一个工厂函数 用于根据需要实例化池中的对象 template
  • 如何让 Python 找到 ffprobe?

    I have ffmpeg and ffprobe安装在我的 mac macOS Sierra 上 并且我已将它们的路径添加到 PATH 中 我可以从终端运行它们 我正在尝试使用ffprobe使用以下代码获取视频文件的宽度和高度 impor
  • 在出错之前如何检查 nilClass 的未定义方法?

    我目前正在使用以下内容 20 p Status p 但是 我仍然收到以下错误 ActionView TemplateError undefined method status for nil NilClass on line 20 of a
  • 稀疏向量模板类:如何清理它?

    我不确定这是否是一个好问题 如果不是 请关闭它 我开始写 使用boost coordinate vector作为起点 sparse vector有效实现类似向量接口的模板类 但很稀疏 它实现了所有常见的向量运算和一个迭代集合元素的快速稀疏迭
  • 为什么这段代码不会产生编译错误?

    template
  • Android TextView 中的等宽表格数字

    我有一个自定义字体 默认情况下具有可变宽度数字字形 并且我想在 Android 中使用该字体的等宽表格数字功能TextView使数字垂直对齐 也就是说 改变如下 像这样的事情 要选择字体的表格数字功能 请使用TextView s fontF
  • 一组类型的模板专业化

    如何为一组数据类型专门化模板 例如 template

随机推荐

  • Unity小知识点:unity中的几种坐标转换

    一 Unity中的几种坐标系 世界坐标 Unity中创建的场景是一个3D世界 其中坐标为 0 0 0 的位置为世界原点 其他物体相对于这个点的坐标位置为世界坐标 transform positon是物体相对于世界坐标的位置 相对坐标 某一个
  • 百度地图采用MarkerClusterer生成聚合点,解决海量点造成地图卡顿的问题

    一 问题 最近在做公司的一个项目 需要在百度地图生成海量点 最开始只是把全部的marker一起显示到地图上 因为一次生成的点比较多 会发生地图卡顿等问题 二 解决方案 MarkerClusterer 百度地图 JS API官方文档 Mark
  • Visual Studio 2005 官方使用教程

    http msdn microsoft com zh cn library ms165079 VS 80 aspx Visual Studio 入门
  • 【第6篇】Inception-v4

    文章目录 摘要 1 简介 2 相关工作 3 体系架构的选择 3 1 纯Inception块 3 2 剩余起始块 3 3 残差的缩放 4 训练方法 5 实验结果 6 结论 摘要 论文链接 Inception v4 近年来 非常深度的卷积网络一
  • sharding+druid 读写分离

    ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈 它由Sharding JDBC Sharding Proxy和Sharding Sidecar 计划中 这3款相互独立的产品组成 他们均提供标准化的数据分片 分
  • 通过cmd窗口导入.sql文件来更新Mysql数据库中的数据

    一 使用命令行的原因 有小伙伴说 干嘛要命令行导入sql文件 直接用navicat导入sql它不香吗 那确实是 直到小编导入一个很大的sql文件时 总会出现数据丢失 俺也不知道为啥 要是有小伙伴知道可以科普一下 二 命令行使用流程 1 启动
  • 第三章——隐藏通信隧道技术

    目录 1 网络层隧道 1 pingtunnel 1 在web边界服务器上下载并运行ptunnel 2 在vps上运行ptunnel 3 在win7电脑上远程连接vps的1080端口 2 icmpsh 3 防御ICMP隧道攻击的方法 2 传输
  • SpringBoot事务详解

    文章目录 一 简介 1 介绍 2 事务特点 3 事务实现方式 3 1 MySql事务实现方式 3 2 SpringBoot实现机制 二 Transactional详解 1 Transactional常用配置 2 事务传播行为 3 事务5种隔
  • IP可以正常访问网站、域名无法正常访问

    问题 域名解析都是都是正常的 可以ping通所指向的IP 端口也可以telnet通 但是就是无法正常访问平台 错误提示403 解决方案 将tomcat里面的server配置文件中的defaultHost这个配置属性修改成网站访问的公网IP地
  • 安装ffmpeg并写入jupyter matplotlib

    Jupyter生成动画需要首先安装一个名叫ffmpeg的软件 这是一个支持网页生成视频的软件 进入ffmpeg主页 Builds CODEX FFMPEG gyan dev 点击下载最新版的ffmpeg git full 7z essent
  • Ogre学习记录

    Ogre学习记录 Posted on 2008 07 09 15 36 RichardHe 阅读 839 评论 2 编辑 收藏 引用 所属分类 OGRE 1 设计初衷 它设计初衷是完全跨平台的 抽象的接口隐藏了平台相关的细节 它设计初衷是大
  • 华为云盘古气象(Pangu-Weather)大模型调试运行之小白教程

    0 前言 最近盘古气象大模型研究成果在 Nature 正刊发表 这个消息引起了大家的广泛关注 作为地理模型爱好者 在之前的学习中接触过一些气象预测模型 对此怀有兴趣 而且顺带蹭蹭热度嘛 不丢人 在此分享一下自己的学习过程 笔者水平有限 如有
  • JPM Coin三部曲 (上) :深入理解摩根幣的運作

    全美最大的銀行摩根大通推出首個由美國銀行支持的加密貨幣 有人說這是主流金融機構開始接納加密貨幣的標誌 有人調侃摩根 CEO 傑米 戴蒙一邊炮轟比特幣 一邊忍不住自己發幣 還有密碼朋克旗幟鮮明地抨擊該 全美最大的銀行摩根大通推出首個由美國銀行
  • centos7配置syslog客户端上传日志

    由于客户要求 需要把主机上的syslog传递到指定系统上 之前没有做过相关设置 本次配置是第一次配置 先上网插了下syslog分为很多种 如图 这只是一部分 可以直接到 etc rsyslog conf配置文件中自行查看 根据需求可以选择全
  • 解决VScode中:C/C++编译器错误导致头文件报错问题

    一 软件安装 VScode安装网址 https code visualstudio com 进入网址 直接download即可 VScode软件很好安装 下载完安装包之后 双击安装包 选同意 选下一步 接下来将框中全部打 之后一路 下一步
  • Unity 新手向,如何快速利用插件设置高亮状态

    前言 相信很多小伙伴在开发游戏的过程中 会需要用到物体高亮的效果 效果如图所示 在初学阶段 我们不需要自己去写复杂的shader 而是快速利用插件来解决这一功能的需求 以下是我们本文将会使用到的一款免费的高亮插件 Quick Outline
  • 【廖雪峰python进阶笔记】面向对象编程

    1 定义类并创建实例 在Python中 类通过 class 关键字定义 以 Person 为例 定义一个Person类如下 class Person object pass 按照 Python 的编程习惯 类名以大写字母开头 紧接着是 ob
  • 关于vue导入csv文件格式错误,js-xlsx导入CSV文件中文乱码处理参考

    最近在vue导入csv文件踩的一个坑 废话就不多说了 直接上源码和处理过程 过程 我最近使用js xlsx导入CSV文件时会出现中文乱码 其实这种问题基本上都是因为文件的编码不对造成的 因为使用这个插件用的比较多之前是可以直接使用UTF 8
  • Gitlab 报错:Error 500 with /api/v4/projects: NoMethodError: undefined method `string_access_level‘

    新安装的gitlab1 14 1版本在调用查询所project的api时 会报如下错误 NoMethodError undefined method string access level for nil NilClass api enti
  • VC文件目录选择对话框(任意目录)

    程序运行界面显示如下 使用目录选择对话框时 如何让其弹出后自动打开指定目录 是的当用目录选择对话框时 用如下的结构打开 以下是代码片段 typedef struct browseinfo HWND hwndOwner LPCITEMIDLI