以下示例使用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);
}