15,978
社区成员
发帖
与我相关
我的任务
分享
CString XXX::GetFilePath(unsigned int nResourceId)
{
CString sFolderPath;
BROWSEINFO bi;
char Buffer[MAX_PATH];
bi.hwndOwner = NULL;
bi.pidlRoot = NULL;
bi.pszDisplayName = Buffer; // 如果这个参数为NULL则不能显示对话框
bi.lpszTitle = "浏览源文件目录";
bi.ulFlags = BIF_EDITBOX; // 包括文件
bi.lpfn = NULL;
bi.iImage = nResourceId;
LPITEMIDLIST pIDList = SHBrowseForFolder(&bi); // 调用显示选择对话框
if(pIDList){
SHGetPathFromIDList(pIDList, Buffer); // 取得文件夹路径到Buffer里
sFolderPath = Buffer;
// 提交数据显示
int iLen = sFolderPath.GetLength();
if(iLen>0){
// 处理显示格式,路径字符串的最后一个字符必须为\
// 因此强制处理
//
if(iLen>3){
sFolderPath += "\\";
}
return sFolderPath;
}// fi sFolderPath.GetLength
}// fi
// 清理工作
LPMALLOC lpMalloc;
if(!FAILED(SHGetMalloc(&lpMalloc))){
lpMalloc->Free(pIDList);
lpMalloc->Release();
}// fi
return "";
}
static TCHAR g_szLastSelDir[MAX_PATH] ;
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT msg, LPARAM lp, LPARAM pData)
{
if (msg == BFFM_INITIALIZED )
{
::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)g_szLastSelDir);
}
return 0;
}
BOOL BrowseDirectory(HWND hwnd, LPSTR lpszDir, DWORD dwLen)
{
lstrcpyn(g_szLastSelDir, lpszDir, sizeof(g_szLastSelDir)) ;
BROWSEINFO bi;
bi.hwndOwner=hwnd;
bi.pidlRoot=0;
bi.pszDisplayName=0;
bi.lpszTitle="Browse Directory";
bi.lpfn=BrowseCallbackProc;
bi.lParam=0;
bi.ulFlags= BIF_STATUSTEXT | BIF_USENEWUI | BIF_RETURNONLYFSDIRS;
LPITEMIDLIST pidl ;
if (pidl = SHBrowseForFolder(&bi))
{
SHGetPathFromIDList(pidl, lpszDir);
_tcscpy(g_szLastSelDir, lpszDir);
return TRUE ;
}
return FALSE ;
}
int CALLBACK BrowseForFolderProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg == BFFM_INITIALIZED)
{
::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, lpData);
}
return 1;
}