要达到的目的如上图所示,默认的根路径是桌面,如何自己修改?
引用http://blog.csdn.net/joinclear/archive/2010/11/17/6016613.aspx
LPITEMIDLIST ParsePidlFromPath(LPCSTR path)
{
OLECHAR szOleChar[MAX_PATH];
LPSHELLFOLDER IpsfDeskTop;
LPITEMIDLIST lpifq;
ULONG ulEaten, ulAttribs;
HRESULT hres;
SHGetDesktopFolder(&IpsfDeskTop);
MultiByteToWideChar(CP_ACP,MB_PRECOMPOSED,path,-1,szOleChar,sizeof(szOleChar));
hres = IpsfDeskTop ->ParseDisplayName(NULL, NULL, szOleChar, &ulEaten, &lpifq, &ulAttribs);
hres=IpsfDeskTop->Release( );
if(FAILED(hres))
return NULL;
return lpifq;
}
void CTestView::OnTest1()
{
// TODO: Add your command handler code here
CString sFolderPath;
BROWSEINFO bi;
char Buffer[MAX_PATH];
//³õʼ»¯Èë¿Ú²ÎÊýbi¿ªÊ¼
bi.hwndOwner = NULL;
//bi.pidlRoot = LPITEMIDLIST("D:");
bi.pidlRoot = ParsePidlFromPath("D://");
bi.pszDisplayName = Buffer;//´Ë²ÎÊýÈçΪNULLÔò²»ÄÜÏÔʾ¶Ô»°¿ò
bi.lpszTitle = "Ð޸ĽÓÊÕ·¾¶";
bi.ulFlags = 0;
bi.lpfn = NULL;
//bi.iImage=IDI_ICON2;
//³õʼ»¯Èë¿Ú²ÎÊýbi½áÊø
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi);//µ÷ÓÃÏÔʾѡÔñ¶Ô»°¿ò
if(pIDList)
{
SHGetPathFromIDList(pIDList, Buffer);
//È¡µÃÎļþ¼Ð·¾¶µ½BufferÀï
sFolderPath = Buffer;//½«Â·¾¶±£´æÔÚÒ»¸öCString¶ÔÏóÀï
}
LPMALLOC lpMalloc;
if(FAILED(SHGetMalloc(&lpMalloc))) return;
//ÊÍ·ÅÄÚ´æ
lpMalloc->Free(pIDList);
lpMalloc->Release();
MessageBox(sFolderPath);
}