有关SHBrowseForFolder函数的问题? 参考了MSDN中的SHBrowseForFolder,我填充了BROWSEINFO结构,但是却不能显示选择文件夹的对话框,还望哪位高手给我举个例子,谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 CString Browse(){ BROWSEINFO bi; char dispname[MAX_PATH], path[MAX_PATH]; ITEMIDLIST * pidl; bi.hwndOwner = 0; bi.pidlRoot = 0; bi.pszDisplayName = dispname; bi.lpszTitle = "请选择文件夹"; bi.ulFlags = BIF_RETURNONLYFSDIRS; bi.lpfn = 0; bi.lParam = 0; bi.iImage = 0; //弹出文件夹浏览窗口,并选取目录 if (pidl = SHBrowseForFolder(&bi)) { SHGetPathFromIDList(pidl, path); return path; } return "";} 我以前也遇到过好像是没有促使化BROWSEINF m_BrowInfo的变量加memset(&m_BrowInfo, '\0', sizeof(BROWSEINFO));试试看 CString Cselectfile::getdetailpath(){ char szOutput[300]="\0"; m_strAviFile=""; bi.hwndOwner=NULL; bi.pidlRoot=NULL; bi.pszDisplayName=szOutput; //bi.pszDisplayName="G:"; bi.lpszTitle=_T("请选择路径:"); bi.ulFlags=BIF_RETURNONLYFSDIRS; bi.lpfn=NULL; bi.lParam=0; bi.iImage=0; pidl=SHBrowseForFolder(&bi); if(pidl==NULL) { szOutput[0]=0; m_strAviFile = ""; return "选择路径出现错误!"; } else { if(!SHGetPathFromIDList(pidl, szOutput)) szOutput[0] = 0; else m_strAviFile = CString(szOutput); //获得路径 } int iLen = m_strAviFile.GetLength(); if (m_strAviFile.GetAt(iLen-1) == '\\') m_strAviFile.Delete(iLen-1 ,1); return m_strAviFile;} CString m_strPath; BROWSEINFO bi; char dispname[MAX_PATH], path[MAX_PATH]; ITEMIDLIST * pidl; bi.hwndOwner = 0; bi.pidlRoot = 0; bi.pszDisplayName = dispname; bi.lpszTitle = "Please Selcet The Folder"; bi.ulFlags = BIF_RETURNONLYFSDIRS; //bi.ulFlags = 0X0040; bi.lpfn = 0; bi.lParam = 0; bi.iImage = 0; if ((pidl = SHBrowseForFolder(&bi)) != NULL){ if( SHGetPathFromIDList(pidl, path) == TRUE ){ m_strPath = path ; } } 再次发帖ListBox右键菜单不会响应, 数组动态分配问题 哪里有比较详尽的API函数的介绍和使用的? 倾尽所有求一通过内存映射传递结构体的源码或小例子 VC还有前途么? win32 Application怎么引用MFC的类的问题,我按别人的方法却不成功 查找算法问题 我刚刚! ★★★ 重定位原理 ? 关于MultiByteToWideChar的汉字问题 请哪位大虾看看如下的代码 在Dialog上用BitBlt显示(SDK)???
{
BROWSEINFO bi;
char dispname[MAX_PATH], path[MAX_PATH];
ITEMIDLIST * pidl;
bi.hwndOwner = 0;
bi.pidlRoot = 0;
bi.pszDisplayName = dispname;
bi.lpszTitle = "请选择文件夹";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = 0;
bi.lParam = 0;
bi.iImage = 0;
//弹出文件夹浏览窗口,并选取目录
if (pidl = SHBrowseForFolder(&bi))
{
SHGetPathFromIDList(pidl, path);
return path;
}
return "";
}
好像是没有促使化
BROWSEINF m_BrowInfo的变量
加memset(&m_BrowInfo, '\0', sizeof(BROWSEINFO));
试试看
{
char szOutput[300]="\0";
m_strAviFile="";
bi.hwndOwner=NULL;
bi.pidlRoot=NULL;
bi.pszDisplayName=szOutput;
//bi.pszDisplayName="G:";
bi.lpszTitle=_T("请选择路径:");
bi.ulFlags=BIF_RETURNONLYFSDIRS;
bi.lpfn=NULL;
bi.lParam=0;
bi.iImage=0;
pidl=SHBrowseForFolder(&bi);
if(pidl==NULL)
{
szOutput[0]=0;
m_strAviFile = "";
return "选择路径出现错误!";
}
else
{
if(!SHGetPathFromIDList(pidl, szOutput))
szOutput[0] = 0;
else
m_strAviFile = CString(szOutput); //获得路径
}
int iLen = m_strAviFile.GetLength();
if (m_strAviFile.GetAt(iLen-1) == '\\')
m_strAviFile.Delete(iLen-1 ,1);
return m_strAviFile;
}
BROWSEINFO bi;
char dispname[MAX_PATH], path[MAX_PATH];
ITEMIDLIST * pidl;
bi.hwndOwner = 0;
bi.pidlRoot = 0;
bi.pszDisplayName = dispname;
bi.lpszTitle = "Please Selcet The Folder";
bi.ulFlags = BIF_RETURNONLYFSDIRS;
//bi.ulFlags = 0X0040;
bi.lpfn = 0;
bi.lParam = 0;
bi.iImage = 0;
if ((pidl = SHBrowseForFolder(&bi)) != NULL){
if( SHGetPathFromIDList(pidl, path) == TRUE ){
m_strPath = path ;
}
}