C++ 打开选择文件夹对话框选择目录的操作

 更新时间:2021年01月13日 11:07:47   作者:dofaster  
这篇文章主要介绍了C++ 打开选择文件夹对话框选择目录的操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧

需要添加头文件:

#ifdef WIN32
#include <shlobj.h>
#endif

调用文件对话框选择目录:

// 选择目录
void CustomInstalWndViewCtrl::OnSigBtnSelectInstallDir()
{
 BROWSEINFO bi;
 bi.hwndOwner = NULL;
 bi.pidlRoot = CSIDL_DESKTOP;//文件夹的根目录,此处为桌面
 bi.pszDisplayName = NULL;
 bi.lpszTitle = NULL;//显示位于对话框左上部的提示信息
 bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;//有新建文件夹按钮
 bi.lpfn = NULL;
 bi.iImage = 0;
 LPITEMIDLIST pidl = SHBrowseForFolder(&bi);//调用选择对话框
 if (pidl == NULL)
 {
 std::cout << "没有选择目录" << std::endl;
 return;
 }
 TCHAR strFolder[MAX_PATH];
 SHGetPathFromIDList(pidl, strFolder);
 std::string sFolder = StringUtil::WStringToString(strFolder);
}

补充:c++ MFC选择文件夹

void openDir(){
 //选择文件夹 
 string _Path,root;
 TCHAR szDir[MAX_PATH];
 BROWSEINFO bi;
 ITEMIDLIST *pidl;
 bi.hwndOwner = this->m_hWnd;
 bi.pidlRoot = NULL;
 bi.pszDisplayName = szDir;//这个是输出缓冲区 
 bi.lpszTitle = _T("文件夹:"); //标题 
 bi.ulFlags = BIF_NEWDIALOGSTYLE;//使用新的界面,在win7中效果较好//BIF_RETURNONLYFSDIRS; 
 bi.lpfn = NULL;
 bi.lParam = 0;
 bi.iImage = 0;
 pidl = SHBrowseForFolder(&bi);//弹出对话框 
 if (pidl == NULL)//点了取消,或者选择了无效的文件夹则返回NULL 
 return;
 
 if (SHGetPathFromIDList(pidl, szDir)) {
 int length = WideCharToMultiByte(CP_ACP, 0, szDir, -1, NULL, 0, NULL, NULL);
 char ch[] = "";
 WideCharToMultiByte(CP_ACP, 0, szDir, -1, ch, length, NULL, NULL);
 root = string(ch);
 } 
}

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。

相关文章

  • C++实现LeetCode(83.移除有序链表中的重复项)

    C++实现LeetCode(83.移除有序链表中的重复项)

    这篇文章主要介绍了C++实现LeetCode(83.移除有序链表中的重复项),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • C++使用opencv读取图片的操作代码(图像处理)

    C++使用opencv读取图片的操作代码(图像处理)

    这篇文章主要介绍了C++使用opencv读取图片,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-04-04
  • C语言菜鸟基础教程之加法

    C语言菜鸟基础教程之加法

    C语言中运算符和表达式数量之多, 在高级语言中是少见的。正是丰富的运算符和表达式使C语言功能十分完善。 这也是C语言的主要特点之一。今天我们来看看加法运算
    2017-10-10
  • C++实现LeetCode(16.最近三数之和)

    C++实现LeetCode(16.最近三数之和)

    这篇文章主要介绍了C++实现LeetCode(16.最近三数之和),本篇文章通过简要的案例,讲解了该项技术的了解与使用,以下就是详细内容,需要的朋友可以参考下
    2021-07-07
  • Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解

    Unix下C程序内存泄漏检测工具Valgrind的安装与使用详解

    以下是对Unix下C程序内存泄漏检测工具Valgrind的安装与使用进行了详细的分析介绍,需要的朋友可以过来参考下
    2013-08-08
  • opencv求解区域的内接矩形

    opencv求解区域的内接矩形

    这篇文章主要为大家详细介绍了opencv求解区域的内接矩形,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-07-07
  • C++第三方日志库Glog的安装与使用介绍

    C++第三方日志库Glog的安装与使用介绍

    这篇文章主要介绍了C++第三方日志库Glog的安装与使用介绍,本文配置所采用的环境为Visual Studio2017,本文通过图文并茂的形式给大家介绍的非常详细,需要的朋友可以参考下
    2022-02-02
  • C++设计模式之策略模式

    C++设计模式之策略模式

    这篇文章主要介绍了C++设计模式之策略模式,本文讲解了什么是策略模式、策略模式的使用场合、策略模式的代码实例等内容,需要的朋友可以参考下
    2014-10-10
  • QT实现简单时钟效果

    QT实现简单时钟效果

    这篇文章主要为大家详细介绍了QT实现简单时钟效果,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2020-05-05
  • C语言在linux下编程详解

    C语言在linux下编程详解

    这篇文章主要介绍了linux下基于C语言的编程,实例分析了基本使用技巧与相关概念,具有一定参考借鉴价值,需要的朋友可以参考下
    2021-08-08

最新评论