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

相关文章

webpack-dev-server的配置--open --hot --inline --port 3000 --progress:自动打开页面、热更新、自动刷新、默认端口号、运行进度输出到控制台

目录结构:    根目录下index.html: <!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initi

springMvc路径匹配原则

Ant path 匹配原则 在Spring MVC中经常要用到拦截器,在配置需要要拦截的路径时经常用到<mvc:mapping/>子标签,其有一个path属性,它就是用来指定需要拦截的路径的。例如: <mvc:interceptor> <mvc:mapping path="/**" /> <bean class="com.i360r.platform.webapp.runtime.vi

unity通过路径找到特定对象并获取指定类型组件的泛型方法

/// <summary>/// 通过路径找到指定类型的组件/// </summary>/// <param name="path">path: 指定要查找的组件所在的GameObject的路径</param>/// <param name="parent">parent: 指定查找的GameObject的父对象,默认为null,表示在整个场景中查找</param>/// <typeparam

Docker 怎么将映射出的路径设置为非root用户权限

在Docker中,容器的根文件系统默认是由root用户拥有的。如果想要在映射到宿主机的路径时设置为非root用户权限,可以通过以下几种方式来实现: 1. 使用具有特定UID和GID的非root用户运行容器: 在运行容器时,你可以使用-u或–user参数来指定用户ID(UID)和/或组ID(GID)。例如: docker run -v /宿主机路径:/容器内路径 -u "1000:1000" -

Android中调用第三方打开本地doc、pdf、ppt、text等文件功能的实现

打开各种格式文件的工具类,代码如下 import android.content.Intent; import android.net.Uri; import java.io.File; public class FileUtils { //android获取一个用于打开HTML文件的intent public static Intent getHtmlFileIntent(Stri

邦芒贴士:在职场中做人再老实要记住这4个心眼

以前我们常常被教育说,做人一定要真诚实在,只有你真心对待别人,才能够赢得别人的真心,才能够交到朋友。但是混职场和交朋友并不一样。    ​在职场中,你是来工作赚钱的,交朋友是次要,你得在工作中生存立足,才有机会追求别的。职场竞争非常激烈,如果我们在职场中太实在、一点心眼都没有的话是要吃亏的。所以职场人士请注意,这4个心眼你必须有。    ​1、话不说太满 做人应该谨言慎行,在工作中尤其应

怎么查看linux文件夹下有多少个文件

ls | wc -w是查看有多少个文件及文件夹 ls | wc -c这个查看目录下多少个文件. 使用wc命令 具体通过wc --help 可以查看。如:wc -l filename 就是查看文件里有多少行       wc -w filename 看文件里有多少个word。       wc -L filename 文件里最长的那一行是多少个字。

oracle group by 分组 一次带出时间和其他字段

select TOWER_SITE_ID,max(SSE_TIME) SSE_TIME,substr( max(nvl(SSE_TIME,'1970-01-01 00:00:00')||SSE_ALARM_NAME) ,20,4000) SSE_ALARM_NAMEfrom VIEW_SJK_ALARM_XSB_HISgroup by TOWER_SITE_ID

屏幕录制在哪里打开?看这里,轻松找到打开方式!

随着科技的飞速发展,屏幕录制功能已经成为我们日常生活和工作中的得力助手。无论是制作教学视频、分享游戏精彩瞬间,还是进行远程会议记录,屏幕录制都发挥着不可替代的作用。可是你知道屏幕录制在哪里打开吗?本文将为大家介绍两种常用的屏幕录制方法,帮助大家轻松掌握屏幕录制的技巧。 屏幕录制在哪里打开? 屏幕录制是许多用户日常工作和学习中经常需要使用到的功能,它可以帮助用户捕捉屏幕上的内容,方便保存

Android WebView加载 不支持 ElementUi el-upload文件上传无法正常打开文件列表 解决方法

最近因为赶项目进度,因此将本来要用原生控件实现的界面,自己做了H5并嵌入webview中。发现点击H5中ElementUi el-upload 标签 不能打开android资源管理器。 通过网络搜索发现是因为 android webview 由于考虑安全原因屏蔽了 input type="file" 这个功能 。 经过不懈的努力,以及google 翻译的帮助 在 stackoverflow 中找到