VC++中如何使文件夹浏览呈现新界面
作者:
在VC++编程中,有很多地方要用到文件夹浏览对话框,在version5.0版本(微软控件版本,一般在Windows2000之前)之前若想在文件夹浏览对话框上加一个新建文件夹按钮,需要自己编程来实现,现在在version5.0版本后,只需设置一个参数就可以了,而且有上下文菜单。如下图所示:(点此下载整个示例工程,本工程略加改动即可使用于自己的程序中。本工程亦可作为初学者的教程,一般教材很少讲文件夹浏览公用对话框的用法。)
示例工程中主要代码如下:
void CTestBrowseDlg::OnBrowse()
{
CString str;
BROWSEINFO bi;
char name[MAX_PATH];
ZeroMemory(&bi,sizeof(BROWSEINFO));
bi.hwndOwner=GetSafeHwnd();
bi.pszDisplayName=name;
bi.lpszTitle="Select folder";
bi.ulFlags=BIF_USENEWUI;
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
if(idl==NULL)
return;
SHGetPathFromIDList(idl,str.GetBuffer(MAX_PATH));
str.ReleaseBuffer();
m_Path=str;
if(str.GetAt(str.GetLength()-1)!=''\\'')
m_Path+="\\";
UpdateData(FALSE);
}
本工程在VC++7.0+WindowsXP中调试通过。
通信地址:(024000)内蒙赤峰市93106部队自动化站
--------------------next---------------------
我以为是讲数控件Ctreectrl,原来不是的!不过还是很好的,谢谢! ( chunyou128 发表于 2008-9-25 23:37:00)
dd ( meteor135 发表于 2006-1-1 20:49:00)
由于SHBrowseForFolder() API函数在内部使用了Windows的Shell对象(该对象以COM形式提供),所以在使用完成后应该释放该对象。方法是:
//获得分配算符
IMalloc* pMalloc = NULL;
hr = SHGetMalloc(&pMalloc);
if(FAILED(hr))
{
tipStr.LoadString(IDS_ERROR_FUNCTIONCALL);
MessageBox(tipStr);
}
//释放pidl
pMalloc->Free((void*)pidl);
pidl = NULL;
//清除分配符
pMalloc->Release();
pMalloc = NULL;
否则,系统对象不能正确释放。另外也不能多次调用IMalloc接口来释放pidl。
( yh_wang_tiger 发表于 2005-9-6 11:26:00)
我怎么没有发现哪里需要释放内存啊
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LPITEMIDLIST idl=SHBrowseForFolder(&bi);
idl用完后必须释放
CoTaskMemFree(idl); ( 鬼龙之舞 发表于 2005-8-31 8:33:00)
杨老师:严重问题,没有释放内存!
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
我怎么没有发现哪里需要释放内存啊 ( bigSML 发表于 2005-8-4 16:46:00)
严重问题,没有释放内存! ( 杨老师 发表于 2004-6-21 0:55:00)
能通过编译,而且可以运行,但选择我的电脑或网上邻居后按“确定”就会出现错误,究竟为什么????? ( alog 发表于 2004-2-10 18:53:00)
#define BIF_USENEWUI 0x0050
即可
( superzjc 发表于 2003-9-12 21:45:00)
我用vc6,下载源代码后,编译也出错了:
error C2065: 'BIF_USENEWUI' : undeclared identifier
ansswer:改成 bi.ulFlags=BIF_EDITBO即可以。 ( daisy-xhm 发表于 2003-6-25 21:51:00)
对于BIF_USENEWUI,您需要安装新的SDK,或者就直接将80赋给它 ( wangjun 发表于 2003-5-25 9:07:00)
.......................................................
--------------------next---------------------