Chinaunix首页 | 论坛 | 博客
  • 博客访问: 530708
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

2008-10-14 14:57:33

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---------------------

阅读(310) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~