`
kmplayer
  • 浏览: 497264 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

如何得到一个路径选择对话框

阅读更多
1,具体步骤见代码:
2,关键默认路径的设定.
3,BROWSEINFO结构介绍
Visual C++(VC)中,BROWSEINFO结构中包含有用户选中目录的重要信息。
1,定义
typedef struct_browseinfo
{
HWND hwndOwner;//浏览文件夹对话框的父窗体句柄
LPCITEMIDLIST pidlRoot;
//ITEMIDLIST结构的地址,包含浏览时的初始根目录,
//而且只有被指定的目录和其子目录才显示在浏览文件夹对话框中。
//该成员变量可以是NULL,在此时桌面目录将被使用。
LPSTR pszDisplayName;
//用来保存用户选中的目录字符串的内存地址。该缓冲区的大小缺省是定义的MAX_PATH常量宏。
LPCSTR lpszTitle;//浏览文件夹对话框的显示文本
UINT ulFlags;
//该标志位描述了对话框的选项。它可以为0,也可以是以下常量的任意组合:
  //BIF_BROWSEFORCOMPUTER:返回计算机名。除非用户选中浏览器中的一个计算机名,否则该对话框中的“OK”按钮为灰色。
  //BIF_BROWSEFORPRINTER:返回打印机名。除非选中一个打印机名,否则 “OK”按钮为灰色。
  //BIF_BROWSEINCLUDEFILES:浏览器将显示目录,同时也显示文件。
  //BIF_DONTGOBELOWDOMAIN:在树形视窗中,不包含域名底下的网络目录结构。
  //BIF_EDITBOX:浏览对话框中包含一个编辑框,在该编辑框中用户可以输入选中项的名字。
//BIF_RETURNFSANCESTORS:返回文件系统的一个节点。仅仅当选中的是有意义的节点时,“OK”按钮才可以使用。
//BIF_RETURNONLYFSDIRS:仅仅返回文件系统的目录。例如:在浏览文件夹对话框中,当选中任意一个目录时,该“OK”按钮可用,而当选中“我的电脑”或“网上邻居”等非有意义的节点时,“OK”按钮为灰色。
//BIF_STATUSTEXT:在对话框中包含一个状态区域。通过给对话框发送消息使回调函数设置状态文本。
//BIF_VALIDATE:当没有BIF_EDITBOX标志位时,该标志位被忽略。如果用户在编辑框中输入的名字非法,浏览对话框将发送BFFM_VALIDATEFAILED消息给回调函数。
BFFCALLBACK lpfn;
LPARAM lParam;
int iImage;
}BROWSEINFO,*PBROWSEINFO,*LPBROWSEINFO;

给出一个代码段:
int CALLBACK BrowseCallbackProc(HWND hwnd,
								UINT uMsg,
								LPARAM lParam,
								LPARAM lpData
								)
{
	wchar_t szPath[MAX_PATH];

	switch(uMsg)
	{
	case BFFM_INITIALIZED:
		SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
		break;

	case BFFM_SELCHANGED:
		if (SHGetPathFromIDList((LPITEMIDLIST) lParam ,szPath))
		{
			SendMessage(hwnd, BFFM_SETSTATUSTEXT,0,(LPARAM)szPath); 

		}
		break;
	}
	return   0;  
}


//选择文件保存路径
void Cibm_testDlg::OnBnClickedButtonBrowse()
{
	// TODO: Add your control notification handler code here

	BROWSEINFO bi;
	memset(&bi,0,sizeof(BROWSEINFO));
	bi.lpszTitle = _T("请选择目录");
	bi.lpfn = BrowseCallbackProc; //设定默认路径
	bi.lParam = (LPARAM)(LPCTSTR)outPutPath;
	bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;

	//Displays a dialog box that enables the user to select a Shell folder.
	//返回一个LPITEMIDLIST,参数是BROWSEINFO结构指针
	LPITEMIDLIST pidl = SHBrowseForFolder ( &bi );
	if ( pidl != 0 )
	{
		// get the name of the folder
		TCHAR path[MAX_PATH]; //保存得到的路径
		//功能是把项目标志符列表转换为文档系统路径
		if ( SHGetPathFromIDList ( pidl, path ) )
		{
			outPutPath.Format(_T("%s"),path);
			if(outPutPath.GetAt(outPutPath.GetLength()-1)!=_T('\\'))
				outPutPath.AppendChar(_T('\\'));
			UpdateData(FALSE);
		}

		// free memory used
		IMalloc * imalloc = 0;
		if ( SUCCEEDED( SHGetMalloc ( &imalloc )) )
		{
			imalloc->Free ( pidl );
			imalloc->Release ( );
		}
	} 
}

分享到:
评论

相关推荐

    C++中探出打开文件夹对话框并获取文件夹路径

    C++中探出打开文件夹对话框并获取文件夹路径,在对选择文件的程序中特别常用

    MFC中获得文件夹路径的方法

    MFC中获得文件夹路径的方法 Button 按钮用于打开选择文件夹的对话框 Edit Control 用于显示选定的文件夹路径

    VFP中通用对话框的使用

    VB中可以使用commondialog控件得到“打开”、“另存为”等标准对话框以及文件路径和文件名,在vfp中同样可以使用这个控件。该控件运行时不可见,是一个ActiveX控件。该控件常用的事件有showopen和showsave,其中show...

    MFC 拖曳文件获得文件路径

    MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径

    vc选择文件打开路径和文件保存路径

    vc选择文件打开路径和文件保存路径对话框,获得文件路径名称

    mfc选择文件夹路径代码

    可以弹出选择文件或者文件夹的对话框,并获得绝对路径

    C#操作文件系统绝对路径和相对路径

    C#根据当前进程的启动路径,获得多个参数拼接的绝对路径。以及根据基准路径和参数获得相对路径。路径操作只用.NET中的System.IO和System.Text命名空间,相比其它的实现方式(比如采用System.Web命名空间)实用性更强...

    VC6.0 在对话框中打开TXT文件.rar

    VC 6.0 基于mfc 打开txt文件在一个对话框窗口中,直接显示出TXT文件的内容,程序功能挺简单的,以下是相关代码:  //生成一个对话框  lpszOpenFile = new CFileDialog   (TRUE,"","",OFN_FILEMUSTEXIST |OFN_...

    API之网络函数---整理网络函数及功能

    DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 DocumentProperties 打印机配置控制函数 EndDocAPI 结束一个成功的打印作业 EndDocPrinter 在后台打印程序的级别指定一个文档的结束 EndPage ...

    XMIExprt.dll

    4.选择 工具——〉选项,在弹出的“选项”对话框中,选择“高级”标签,在高级标签中点击“文件路径”按钮,在弹出的“文件路径”对话框中,点击“加载项”右边的“ ”按钮,选择Visio 2003安装路径(Program Files...

    Delphi开发技巧之-文件操作

    Windows中的通用应用程序的类名 使用API函数复制移动文件 使用API访问ListBox项 使用GetTempFileName创建一个唯一的临时文件 使用INI文件 ...运行一个程序或打开一个关联文件 返回UNC路径 通过CRC-32验证文件

    arcgis工具

    Shift:添加至/取消选择 Ctrl:移动选择锚 N:下一个被选要素 R:切换至旋转模式/从旋转模式切换 F:切换至要素模式/从要素模式切换 E:在Sketch工具、Edit工具和Edit Annotation工具间切换 L:在跟踪要素模式下将...

    Visual C++开发经验技巧宝典(第4章)

    0214 如何将一个工程中的部分资源加到另一个工程中 104 0215 根据句柄获得窗口对象的方法 104 0216 如何共享MSDN 104 0217 从完整的文件名中去除路径 104 0218 从复合字符串中解析子串 105 0219 如何获得...

    java 46种文件操作大全

    14.复制一个文件夹下所有的文件夹到另一个文件夹下 15.移动文件夹 16.移动一个文件夹下所有的文件夹到另一个目录下 17.以一个文件夹的框架在另一个目录创建文件夹和空文件 18.复制文件 19.复制一个文件夹下所有...

    Windows API函数大全

    AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 AddMonitor 为系统添加一个打印机监视器 AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入...

    VC++常用功能实例

    ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现...

    VC++常用的共用函数100多页

    ◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现...

    Visual C++ 完全自学宝典 (部分章节) 电子书 PDF

     15.4 使应用程序在同一时刻只能运行一个实例  15.5 创建选择文件夹的对话框  15.6 使窗口置顶  15.7 使应用程序支持启动参数  15.8 获得程序自身所在的目录  15.9 如何播放WAV文件  15.10 更改选择...

    Delphi的一个超级函数代码库

    提供了一个高制定性的消息对话框。 Lists.pas  提供了很多个TList的扩展类,是学习很研究TList的好东西。 Calendar.pas  公历与农历换算和时间处理的函数单元,具体看里面的说明。 Clipboards.pas 提供一个剪贴板...

    Visual Studio.Net(VS) 源码管理器

    4、 通过上述步骤,我们已经成功地在另一个开发主机上获得保存在SourceSafe的工程。将来如果有新的开发人员加入,只需重复这四个步骤即可。 五、 版本控制的几个概念在Visual Studio.Net开发环境"解决方案资源管理器...

Global site tag (gtag.js) - Google Analytics