//作者: 贾旭滨
//2002年11月22号
经常看见本站的BBS上面的朋友问怎样显示文件夹选择框,其实从技术角度来说,这并不是个难题,主要是使用二个API函数SHGetSpecialFolderLocation() & SHBrowseForForlder()就可以实现了,好!那我们就开始动工了.假设我们需要打开一个网上邻居的文件夹浏览对话框。
SHGetSpecialFolderLocation()函数得到一个特定的文件夹的一些参数,比如像我的文件,我的电脑等等,那么在这个例子中是网上邻居,代码如下:
LPITEMIDLIST pidlRoot=NULL;
SHGetSpecialFolderLocation(m_hWnd,CSIDL_NETWORK,&pidlRoot);
第一个参数就不解释了,就是这个浏览对话框时属于哪个主对话框的.
第二个参数是,表示我们想打开甚么特定的文件夹,CSIDL_NETWORK表示网上邻居, CSIDL_DESKTOP就表示打开桌面文件夹,其它的具体参数大家可以参考MSDN.
最后一个参数返回一些关于这个特定活页夹的一些设置,和信息,等等,以后需要用到这个参数的.
那么既然已经得到,特定文件夹的参数信息了,那我们就应该使用另外一个函数SHBrowseForFolder()来打开这个特定活页夹的浏览对话框了,这个函数只有一个参数,但是它是个结构,相关的代码如下:
BROWSEINFO bi; //必须传入的参数,下面就是这个结构的参数的初始化
CString strDisplayName; //用来得到,你选择的活页夹路径,相当于提供一个缓冲区
bi.hwndOwner=GetSafeHwnd(); //得到父窗口Handle值
bi.pidlRoot=pidlRoot; //这个变量就是我们在上面得到的.
bi.pszDisplayName=strDisplayName.GetBuffer(MAX_PATH+1); //得到缓冲区指针,
bi.lpszTitle=”网上邻居”; //设置标题
bi.ulFlags=BIF_BROWSEFORCOMPUTER; //设置标志
bi.lpfn=NULL;
bi.lParam=0;
bi.iImage=0; //上面这个是一些无关的参数的设置,最好设置起来,
SHBrowseForFolder(&lpbi); //打开对话框
strDisplayName.ReleaseBuffer(); //和上面的GetBuffer()相对应
好了,大功告成,赶快去自己的计算机上面试试看.
还可以,试着打开其它的特定文件夹.