选择目录对话框,掉用什么api

飞翔的薄荷 2016-08-08 11:45:28
这是我调用api出现的选择文件夹对话框。


这是别人选择文件夹对话框。


请问别人选择文件夹对话框是调用哪个API。
...全文
126 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2016-08-11
  • 打赏
  • 举报
回复
补充,你首先程序肯定要初始化 COM 的。其次我的例子是用 SetDlgItemText(hwndDlg, IDC_FOLDER, xxx); 来设置窗口文字的。如果自己写的话,这里根据需要修改一下。IFileDialog 的结果是 Unicode 的,而且是二级指针。而 SHBrowseForFolder 则是自己提供缓冲区的。
「已注销」 2016-08-11
  • 打赏
  • 举报
回复
这个是用 Vista 开始提供的 IFileDialog COM 接口提供的,SHBrowseForFolder 的效果是树形结构的。
// 优先尝试该方法,Vista 或之后的系统支持。
IFileDialog *pifd = NULL;
HRESULT hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_ALL, IID_IFileDialog, (void **)&pifd);
if (hr == S_OK)
{
	hr = pifd->SetOptions(FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST);
	if (hr == S_OK)
	{
		hr = pifd->Show(hwndDlg);
		if (hr == S_OK)
		{
			IShellItem *pishi = NULL;
			hr = pifd->GetResult(&pishi);
			if (hr == S_OK)
			{
				WCHAR *pszFile = NULL;
				hr = pishi->GetDisplayName(SIGDN_FILESYSPATH, &pszFile);
				if (hr == S_OK)
				{
					SetDlgItemTextW(hwndDlg, IDC_FOLDER, pszFile);
					CoTaskMemFree(pszFile);
				}
				pishi->Release();
			}
		}
	}
	pifd->Release();
}
else
{
	// 尝试传统文件夹选择控件
	BROWSEINFO bi = { 0 };
	bi.hwndOwner = hwndDlg;
	bi.lpszTitle = TEXT("请选择文件保存位置:");
	bi.ulFlags = BIF_DONTGOBELOWDOMAIN | BIF_RETURNONLYFSDIRS;
	LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
	if (pidl != NULL)
	{
		TCHAR szPath[MAX_PATH] = { 0 };
		if (SHGetPathFromIDList(pidl, szPath))
		{
			SetDlgItemText(hwndDlg, IDC_FOLDER, szPath);
		}
		CoTaskMemFree(pidl);
	}
}
  • 打赏
  • 举报
回复
前来围观,学习一下。。。。。
飞翔的薄荷 2016-08-09
  • 打赏
  • 举报
回复
SHBrowseForFolder 是第一个图片我用的那个,我问的是别人(第二个图)用的是哪个api?
oyljerry 2016-08-09
  • 打赏
  • 举报
回复
SHBrowseForFolder设置一下其实目录,UI风格等
Eleven 2016-08-08
  • 打赏
  • 举报
回复
选择文件夹用SHBrowseForFolder
选择文件对话框用CFileDialog
lx624909677 2016-08-08
  • 打赏
  • 举报
回复
BROWSEINFO  bi;
	bi.hwndOwner=NULL;
	bi.pidlRoot=NULL;
	bi.pszDisplayName=NULL;
	bi.lpszTitle=NULL;
	bi.ulFlags=0;
	bi.lpfn =NULL;
	bi.iImage =0;
	LPCITEMIDLIST pidl=SHBrowseForFolder(&bi);
	if(!pidl)
		return;
	TCHAR  szDisplayName[255];
	SHGetPathFromIDList(pidl,szDisplayName);
	CString str(szDisplayName);
最后的str就是选择的目录

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧