Win32开发入门(20):浏览文件夹

最近忙于一些相当无聊的事情,还没忙完,不过,博客还是要写的,不然我头顶上会多了几块砖头 。

在上一篇博文中,我们浏览了文件,今天我们也浏览一下目录,如何?

浏览目录我们 同样有两个规矩,用托管类库的我就不说了,相信大家两分钟就能弄好。重点还是说说第二个规矩,用 API方式。我们用到的是Shell函数,一提到Shell,可能有朋友会感到痛苦,因为它很多函数涉及到COM ,不过,也没什么了,反正我的哲学理念是立足于实战。所以,我给大家总结了思路。

就拿今 天我们要用到的SHBrowseForFolder函数来说吧,先说说这个函数的用途吧,一句话概括:显示一个对 话框,让你可以选择一个目录。

COM对象需要先初始化,再用,用完了释放,根据这个思路,大 的步骤如下:

1、CoInitialize(NULL); //初始化。

2、调用函数。

3、 CoUninitialize(); //释放。

这个动作就好比你去租用商家的自行车去游玩,别人只是把资源 (自行车)借给你用,你给押金(引用计数),等到你耍完了,再去把资源还给人家。

要调用 SHBrowseForFolder函数,先初始化它的参数,也就是BROWSEINFO结构体,这个家伙初始化后,将地址 传给SHBrowseForFolder的lpbi参数。BROWSEINFO结构你得设置以下成员。

PIDLIST_ABSOLUTE 

pIDLIST;//函数返回的值存在这里
BROWSEINFO brsInfo;
WCHAR fdpath[MAX_PATH]; //接收选择目录的字符数组     

。。。。。。。。。。。。。。。。。。。
brsInfo.hwndOwner = hWnd; //拥有者窗口
brsInfo.pidlRoot = NULL; //根目录为桌面
brsInfo.pszDisplayName = fdpath; //返回的被选择的路径
brsInfo.lpszTitle = L"请选择目录"; //对话框标题
brsInfo.ulFlags= BIF_RETURNONLYFSDIRS | BIF_DONTGOBELOWDOMAIN | BIF_NEWDIALOGSTYLE; //不显

示网络路径
brsInfo.lpfn = NULL; //没有回调
brsInfo.lParam = NULL; //没有额外参数

之后就可以调用函数了。

// 初始化COM

组件,用完后记得释放
CoInitialize(NULL);
pIDLIST = SHBrowseForFolder(&brsInfo);
if(pIDLIST)
{
    //取出对话框中用来显示结果的控件
    HWND hStatic = GetDlgItem(hfDlg, IDC_DISPLAY);
    SendMessage(hStatic,WM_SETTEXT, NULL, (LPARAM)fdpath);
}
CoUninitialize();
// 释放IDLIST
CoTaskMemFree((LPVOID)pIDLIST);

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索目录
, 函数
, null
, 选择
浏览
,以便于您获取更多的相关知识。

时间: 2024-06-11 20:52:46

Win32开发入门(20):浏览文件夹的相关文章

Win32开发入门(10) 绘图(C)

今天我们来欣赏一下用于填充图形的函数,当然我不会逐个去介绍,因为我们参考MSDN直接套参数 就可以了. SetDCBrushColor函数有必要扯一下,它的声明如下: COLORREF SetDCBrushColor( __in HDC hdc, __in COLORREF crColor ); 第二个参数,通过RGB宏产生COLORREF传进去就可以了,比如这样: SetDCBrushColor(ps.hdc,RGB(211,254,41)); 但是,如果只是调用这个函数,你会发现 在绘图的时

Win32开发入门(4) 创建菜单

我们当然知道 ,现在,在实际开发中肯定不会像我这样写Win32程序的,你看,连个WinMain都要N行代码.但很多人 不明白什么叫学习,什么叫探索.实际上,通常能用于实际开发中的技巧只是占我们对客观世界的认识 总和不到20%,所以,如果你有兴趣计算一下,估计有80%的知识你不知道用到哪里去了.就算我们今后 不会把Win32程序投入到实际操作中,然而如果你了解过这东西,你会发现很多时候对我们是有帮助的 . 哪怕只是简单认识一下Win32的一些原理,相信对于日后编程的学习和成长,是有益处的. 为了提

Win32开发入门(3) 窗口的重绘

我们今天来吹一下关于窗口重绘的事情,在开始吹牛之前,我们先用上一篇博文中说到的方法写一 个简单的Win32应用程序.代码如下: #include <Windows.h> //先声明一下消息处理函数 LRESULT CALLBACK MyWindowProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); // 入口点 int CALLBACK WinMain( HINSTANCE hInstance, HINSTANCE hPrvInst

怎样截获类名为#32770的 打开|浏览文件夹窗口?

问题描述 怎样截获类名为#32770的 打开|浏览文件夹窗口? 如图:可不可以截获这个窗口并替换为自己编写的浏览窗口? 解决方案 1.将创建此对话框的API inlinehook掉,即可拦截获取.2.用消息钩子,在wm_create里判断类名 解决方案二: hook api: browserforfolder 解决方案三: 你说的是html里面的class吧?另外class不是#开头的吧?可以用jquery插件,一般别人都有自己写好的界面的.

用C#获取浏览文件夹对话框

对话框 我们知道,C#里面有选择文件的对话框控件,却没有选择文件夹的对话框控件,不少人为了选择一个文件夹只好自己用TreeView类来处理,其实在C#里面完全不用那么麻烦,我们可以用C#的FolderNameEditor类的子类FolderBrowser类来实现获取浏览文件夹对话框的功能. 下面来看看具体是怎么实现的. 首先新建一个winform的项目,再新建一个类文件(File->AddNewItem->Class). 因为FolderNameEditor是在System.Windows.F

Win32开发入门(9) 绘图(B)

我们今天继续涂鸦,实践证明,涂鸦是人生一大乐趣. 首先,我们写一个程序骨架子,以便 做实验. #include <Windows.h> LRESULT CALLBACK MainWinProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain( HINSTANCE hThisApp, HINSTANCE hPrevApp, LPSTR lpsCmdln, int iShow) { WNDCLASS wc

Win32开发入门(8) 绘图(A)

从本篇开始,我就不吹牛皮,那就吹吹兔皮吧.说说与绘图有关的东东. 要进行绘制,首先 要得到一个DC,啥是DC呢?按字面翻译叫设备上下文,也可以翻译为设备描述表,它主要指API为我们 封装了一些与显示设备相关的交互操作,我们这里说的是图形的绘制,自然指的是显卡.当然,对于同 一客观事物,世界上并不存在唯一的理解方案,技术上的东西最终拿来用的,不应该有硬性的去统一. 我们之中的很多人,最大的失败在于,人家说要这样理解他就毫不怀疑地这样理解,权威人士说要这样 这样,他就不经过大脑思考地跟着那样那样.

Win32开发入门(7) 多边形窗口

通常情况下,窗口都是一个矩形,不过,调用下面这个函数,可以自定义窗口的形状. int SetWindowRgn( __in HWND hWnd, __in HRGN hRgn, __in BOOL bRedraw ); 第一个参数是窗口的句柄,第二个参数也是一个句柄--HRGN,一个多边形的区域,可 以用CreatePolygonRgn函数来创建.第三个参数指定函数调用成功后是否重画窗口,如果窗口还没有显 示,就不必了,如果窗口已经显示,可以考虑设为TRUE. 我们创建用于显示窗口形状的区域句

Win8系统同一窗口打开浏览文件夹设置无效怎么修复

  一般我们会将win8系统浏览文件夹的方式设置为"在同一窗口中打开每个文件夹",这和win7 64位旗舰版相似,这样就可以更加方便的对这些文件夹进行管理,在前面教程中也与大家介绍过Win8系统在同一窗口中打开每个文件夹设置方法.但有部分用户反映,在设置浏览文件夹选项后出现此现象,并且不能在同一窗口中打开每个文件夹,对于该问题小编特别整理了三种修复教程. 修复方法一: 1.Win+R调出运行 ,输入"regedit"回车或确定打开注册表; 2.然后找到注册表这一项:

JQuery实现浏览文件夹并获取路径

问题描述 JQuery实现浏览文件夹并获取路径 JQuery实现浏览文件夹并获取路径!开始默认为桌面!谢谢谢谢啊!求助! 解决方案 http://blog.csdn.net/tujiyue/article/details/6545742 解决方案二: http://blog.csdn.net/tujiyue/article/details/6545742 解决方案三: http://download.csdn.net/download/zhongbin77/1454986