SHBrowseForFolder打开文件夹时,记住上一次打开的路径

2024-04-27 16:48

本文主要是介绍SHBrowseForFolder打开文件夹时,记住上一次打开的路径,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

在win32桌面开发时,经常需要打开选择路径选择对话框,拿本地录像功能来说,比如第一次选择了c:\record目录,则第二次,打开路径选择对话框时,希望直接定位到上一次选择的路径,如下所示:
直接定位到c:\record。
在这里插入图片描述
大致代码如下:

// BrowserDirectoryTest.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。
//#include <iostream>
#include <Windows.h>
#include <Shlobj.h>#pragma comment(lib, "Shell32.lib")// 此回调函数为全局函数或静态函数;
int CALLBACK BrowseCallbackProc( HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData )
{std::string strInitDir = "c:\\record";switch(uMsg){case BFFM_INITIALIZED: {::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)strInitDir.c_str());}break;default:break;}return 0;
}bool SelectFilePath(std::string& strFilePath)
{char szPathName[MAX_PATH] = { 0 };BROWSEINFOA bInfo = { 0 };bInfo.hwndOwner = GetForegroundWindow(); // 父窗口;bInfo.lpszTitle = "选择目录";bInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_USENEWUI /*包含一个编辑框 用户可以手动填写路径 对话框可以调整大小之类的..;*/| BIF_UAHINT /*带TIPS提示*/ /*| BIF_NONEWFOLDERBUTTON 不带新建文件夹按钮*/;// 关于更多的 ulFlags 参考 http://msdn.microsoft.com/en-us/library/bb773205(v=vs.85).aspx;bInfo.lpfn = BrowseCallbackProc;std::string strInitDir = "c:\\record";bInfo.lParam = NULL;LPITEMIDLIST lpDlist;lpDlist = SHBrowseForFolderA(&bInfo);if (nullptr == lpDlist) // 单击了确定按钮;{strFilePath.clear();return false;}SHGetPathFromIDListA(lpDlist, szPathName);strFilePath = szPathName;return true;
}int main()
{std::cout << "Hello World!\n";std::string strSelectDir;SelectFilePath(strSelectDir);return 0;
}

我的工程是“使用 Unicode 字符集”,如下所示:
在这里插入图片描述
运行的时候,发现路径选择对话框弹出的时候,并未定位到c:\record目录。

经过分析,可以通过如下修改解决此问题:
在这里插入图片描述
将原来的std::string变成宽字节std::wstring,由于本人对宽字节操作不熟,更习惯使用std::string,无意中发现,可以通过如下修改实现。
在这里插入图片描述
红色方框的宏定义后面比之前多个A。

这篇关于SHBrowseForFolder打开文件夹时,记住上一次打开的路径的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/941024

相关文章

MySQL 打开binlog日志的方法及注意事项

《MySQL打开binlog日志的方法及注意事项》本文给大家介绍MySQL打开binlog日志的方法及注意事项,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、默认状态二、如何检查 binlog 状态三、如何开启 binlog3.1 临时开启(重启后失效)

苹果macOS 26 Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色

《苹果macOS26Tahoe主题功能大升级:可定制图标/高亮文本/文件夹颜色》在整体系统设计方面,macOS26采用了全新的玻璃质感视觉风格,应用于Dock栏、应用图标以及桌面小部件等多个界面... 科技媒体 MACRumors 昨日(6 月 13 日)发布博文,报道称在 macOS 26 Tahoe 中

Python pip下载包及所有依赖到指定文件夹的步骤说明

《Pythonpip下载包及所有依赖到指定文件夹的步骤说明》为了方便开发和部署,我们常常需要将Python项目所依赖的第三方包导出到本地文件夹中,:本文主要介绍Pythonpip下载包及所有依... 目录步骤说明命令格式示例参数说明离线安装方法注意事项总结要使用pip下载包及其所有依赖到指定文件夹,请按照以

SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志

《SpringBoot项目配置logback-spring.xml屏蔽特定路径的日志》在SpringBoot项目中,使用logback-spring.xml配置屏蔽特定路径的日志有两种常用方式,文中的... 目录方案一:基础配置(直接关闭目标路径日志)方案二:结合 Spring Profile 按环境屏蔽关

C#如何去掉文件夹或文件名非法字符

《C#如何去掉文件夹或文件名非法字符》:本文主要介绍C#如何去掉文件夹或文件名非法字符的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录C#去掉文件夹或文件名非法字符net类库提供了非法字符的数组这里还有个小窍门总结C#去掉文件夹或文件名非法字符实现有输入字

VSCode设置python SDK路径的实现步骤

《VSCode设置pythonSDK路径的实现步骤》本文主要介绍了VSCode设置pythonSDK路径的实现步骤,包括命令面板切换、settings.json配置、环境变量及虚拟环境处理,具有一定... 目录一、通过命令面板快速切换(推荐方法)二、通过 settings.json 配置(项目级/全局)三、

使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)

《使用Python和Matplotlib实现可视化字体轮廓(从路径数据到矢量图形)》字体设计和矢量图形处理是编程中一个有趣且实用的领域,通过Python的matplotlib库,我们可以轻松将字体轮廓... 目录背景知识字体轮廓的表示实现步骤1. 安装依赖库2. 准备数据3. 解析路径指令4. 绘制图形关键

VS配置好Qt环境之后但无法打开ui界面的问题解决

《VS配置好Qt环境之后但无法打开ui界面的问题解决》本文主要介绍了VS配置好Qt环境之后但无法打开ui界面的问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要... 目UKeLvb录找到Qt安装目录中designer.UKeLvBexe的路径找到vs中的解决方案资源

如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)

《如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)》:本文主要介绍如何更改pycharm缓存路径和虚拟内存分页文件位置(c盘爆红)问题,具有很好的参考价值,希望对大家有所帮助,如有... 目录先在你打算存放的地方建四个文件夹更改这四个路径就可以修改默认虚拟内存分页js文件的位置接下来从高级-

Python+PyQt5实现文件夹结构映射工具

《Python+PyQt5实现文件夹结构映射工具》在日常工作中,我们经常需要对文件夹结构进行复制和备份,本文将带来一款基于PyQt5开发的文件夹结构映射工具,感兴趣的小伙伴可以跟随小编一起学习一下... 目录概述功能亮点展示效果软件使用步骤代码解析1. 主窗口设计(FolderCopyApp)2. 拖拽路径