如何浏览文件夹






4.88/5 (19投票s)
2006 年 2 月 16 日
1分钟阅读

237177

2933
本文提供了一个“剪切-粘贴”解决方案,用于获取目录的路径。
引言
本文提供了一个简洁明了的“剪切-粘贴”解决方案,用于解决浏览文件夹这一由来已久的问题。 市面上有很多类提供了更多的自定义选项和大量的功能,但我相信多一个示例也不会有坏处。
何时使用此解决方案
与此处的一些其他方法相比,此方法的优势在于它直接包装了 SHBrowseForFolder
函数。 因此,您可以在不使用 MFC 的控制台应用程序中使用它,例如单元测试应用程序,这些应用程序可以从不硬编码测试结果的输出位置中受益。
简而言之,如果您正在寻找赏心悦目的界面,请查看 XFolderDialog 或此处的一些其他文件夹对话框。 否则,请继续阅读。
使用代码
要使用此代码,您需要包含以下标准文件
#include "shlobj.h" #include <string>
GetFolder 函数
Params
folderpath
- 一个引用,指向一个字符串,如果成功,该字符串将包含文件夹路径。szCaption
- 对话框的可选消息。hOwner
- 父窗口的可选句柄。
Returns
true
如果成功,false
如果取消或发生错误。
bool GetFolder(std::string& folderpath, const char* szCaption = NULL, HWND hOwner = NULL) { bool retVal = false; // The BROWSEINFO struct tells the shell // how it should display the dialog. BROWSEINFO bi; memset(&bi, 0, sizeof(bi)); bi.ulFlags = BIF_USENEWUI; bi.hwndOwner = hOwner; bi.lpszTitle = szCaption; // must call this if using BIF_USENEWUI ::OleInitialize(NULL); // Show the dialog and get the itemIDList for the // selected folder. LPITEMIDLIST pIDL = ::SHBrowseForFolder(&bi); if(pIDL != NULL) { // Create a buffer to store the path, then // get the path. char buffer[_MAX_PATH] = {'\0'}; if(::SHGetPathFromIDList(pIDL, buffer) != 0) { // Set the string value. folderpath = buffer; retVal = true; } // free the item id list CoTaskMemFree(pIDL); } ::OleUninitialize(); return retVal; }
结论
好吧,这就是它的全部。 如果这段代码能为这里的哪怕一个人节省时间,那么花费的几分钟时间就值得了。 享受吧!