“打开文件夹”的程序
主要用到了 BROWSEINFO 结构和 ITEMIDLIST 结构,具体内容见下方说明
下面是程序段,为了能让大家看懂,写了详细的注释说明,有点乱哈~大家凑合着看了~
void CText01Dlg::OnButtonBlowse() //工程名和函数名换成自己的
{
UpdateData(true);
char szDir[MAX_PATH];//定义一个字符串用来接收文件名
BROWSEINFO bi;//建立一个 BROWSEINFO 对象
ITEMIDLIST*pidl;//创建一个结构指针
memset(&bi,0,sizeof BROWSEINFO);
bi.hwndOwner=m_hWnd;
bi.hwndOwner=this->m_hWnd; // 指定父窗口,在对话框显示期间,父窗口将被禁用
bi.pidlRoot=NULL;// 如果指定 NULL,就以"桌面"为根 pidlRoot:ITEMIDLIST 结构的
地址,包含浏览时的初始根目录
bi.pszDisplayName=szDir;//pszDisplayName:用来保存用户选中的目录字符串的内存地
址(缓冲区)
bi.lpszTitle="请选择一个 wav 文件"; // 这一行将显示在对话框的顶端
//描述窗口的选项:包含状态文本、显示目录和文件、只返回文件系统目录(不好用
呢)、返回系统一个节点、
bi.ulFlags=BIF_STATUSTEXT|BIF_BROWSEINCLUDEFILES|
BIF_RETURNONLYFSDIRS|BIF_RETURNFSANCESTORS ;
bi.lpfn=NULL;//lpfn:应用程序定义的浏览对话框回调函数的地址。当对话框中的事件
发生时,该对话框将调用回调函数。该参数可用为 NULL。
bi.lParam=0;//lParam:对话框传递给回调函数的一个参数指针。
bi.iImage=0;//iImage:与选中目录相关的图像。该图像将被指定为系统图像列表中的索
引值。
pidl=SHBrowseForFolder(&bi);
if(pidl==NULL)return;
// if(SHGetPathFromlDList(pidl,szDir))return;
else
SHGetPathFromIDList(pidl,szDir); //显示文件路径,不然 szDir 只保存一个文件名
m_strFileName=szDir;
UpdateData(FALSE);
}
1. BROWSEINFO
它是一个结构, 原型是
typedef struct _browseinfo {
评论0