浏览文件夹

【勇芳软件工作室】汉化HomePreviousNext

以下示例使用SHBrowseForFolder功能来提示用户程序组。程序目录被指定为根。

// Main_OnBrowse - 浏览程序文件夹。

// hwnd - 应用程序主窗口的句柄

//

//使用假定指向的全局变量g_pMalloc

//到shell的IMalloc接口。

void Main_OnBrowse(HWND hwnd)

{

BROWSEINFO bi;

LPSTR lpBuffer;

LPITEMIDLIST pidlPrograms; // PIDL for Programs文件夹

LPITEMIDLIST pidlBrowse; // PIDL由用户选择

//分配缓冲区以接收浏览信息。

if ((lpBuffer = (LPSTR) g_pMalloc->lpVtbl->Alloc(

g_pMalloc, MAX_PATH)) == NULL)

return;

//获取程序文件夹的PIDL。

if(!SUCCEEDED(SHGetSpecialFolderLocation(

hwnd,CSIDL_PROGRAMS,& pidlPrograms))){

g_pMalloc->lpVtbl->Free(g_pMalloc, lpBuffer);

return;

}

//填写BROWSEINFO结构。

bi.hwndOwner = hwnd;

bi.pidlRoot = pidlPrograms;

bi.pszDisplayName = lpBuffer;

bi.lpszTitle = "Choose a Program Group";

bi.ulFlags = 0;

bi.lpfn = NULL;

bi.lParam = 0;

//浏览一个文件夹并返回其PIDL。

pidlBrowse = SHBrowseForFolder(&bi);

if (pidlBrowse != NULL) {

//显示显示名称,标题和文件系统路径。

MessageBox(hwnd, lpBuffer, "Display name", MB_OK);

if(SHGetPathFromIDList(pidlBrowse,lpBuffer))

SetWindowText(hwnd, lpBuffer);

//释放SHBrowseForFolder返回的PIDL。

g_pMalloc->lpVtbl->Free(g_pMalloc, pidlBrowse);

}

// 清理。

g_pMalloc->lpVtbl->Free(g_pMalloc, pidlPrograms);

g_pMalloc->lpVtbl->Free(g_pMalloc, lpBuffer);

}