SHBrowseForFolder打开默认路径

原创
小哥 2年前 (2023-05-23) 阅读数 36 #大杂烩

转自: http://blog.csdn.net/shuilan0066/article/details/7302904

一般路径方法如下:
BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));
LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);

if (pidl==NULL)
return;

if(pidl != NULL)
{
TCHAR * path = new TCHAR[MAX_PATH];

SHGetPathFromIDList(pidl,path);
//  MessageBox(NULL,path,TEXT("Choose"),MB_OK);
if(SUCCEEDED(SHGetMalloc(&pMalloc)))//pidl尖头物体用完后应释放,之前忽略
{
pMalloc->Free(pidl);
pMalloc->Release();
}
m_filePath=path;
UpdateData(FALSE);

delete [] path;
}

这将打开根目录,并且每次它位于根目录中时, 很是麻烦

你能打开指定的目录吗? 答案是肯定的

第1步: 建立类的CALLBACK函数
public:

static int CALLBACK  BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
switch(uMsg)
{
case BFFM_INITIALIZED:    //初始化消息
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)(LPTSTR)(LPCTSTR)m_filePath);   //  m_filePath 类的静态变量
break;
case BFFM_SELCHANGED:    //选择路径更改,
{
TCHAR curr[MAX_PATH];
SHGetPathFromIDList((LPCITEMIDLIST)lParam,curr);
::SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)curr);
}
break;
default:
break;
}
return 0;
}

第2步:指定BROWSEINFO bi相关信息

BROWSEINFO bi;
ZeroMemory(&bi,sizeof(BROWSEINFO));

TCHAR szDefaultDir[MAX_PATH];
CString strDef(_T("C:\WINDOWS\"));
memcpy(szDefaultDir,strDef.GetBuffer(strDef.GetLength()2),strDef.GetLength()2);
strDef.ReleaseBuffer();
szDefaultDir[strDef.GetLength()]=0;

bi.hwndOwner = this->GetSafeHwnd();
bi.pidlRoot = 0;
bi.pszDisplayName = 0;
bi.lpszTitle = L"选择路径";
bi.ulFlags = BIF_STATUSTEXT;
bi.lpfn = BrowseCallbackProc ;        //设置CALLBACK函数
bi.iImage = 0;
bi.lParam = long(&szDefaultDir);    //设置默认路径

LPMALLOC pMalloc;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);

if (pidl==NULL)
return;

if(pidl != NULL)
{
TCHAR * path = new TCHAR[MAX_PATH];

SHGetPathFromIDList(pidl,path);
if(SUCCEEDED(SHGetMalloc(&pMalloc)))//pidl尖头物体用完后应松开
{
pMalloc->Free(pidl);
pMalloc->Release();
}
m_filePath=path;

// 在文件中保存路径
CString pathSet;
pathSet=m_exePath+L"UnionPicSet.ini";
WritePrivateProfileString(_T("Path"),_T("DirectoryPath"),m_filePath,pathSet);

UpdateData(FALSE);
delete [] path;

}

翻译自:

http://blog.csdn.net/reallyioio/article/details/2948755

版权声明

所有资源都来源于爬虫采集,如有侵权请联系我们,我们将立即删除

热门