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++中探出打开文件夹对话框并获取文件夹路径,在对选择文件的程序中特别常用
MFC中获得文件夹路径的方法 Button 按钮用于打开选择文件夹的对话框 Edit Control 用于显示选定的文件夹路径
VB中可以使用commondialog控件得到“打开”、“另存为”等标准对话框以及文件路径和文件名,在vfp中同样可以使用这个控件。该控件运行时不可见,是一个ActiveX控件。该控件常用的事件有showopen和showsave,其中show...
MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径 MFC 拖曳文件获得文件路径
vc选择文件打开路径和文件保存路径对话框,获得文件路径名称
可以弹出选择文件或者文件夹的对话框,并获得绝对路径
C#根据当前进程的启动路径,获得多个参数拼接的绝对路径。以及根据基准路径和参数获得相对路径。路径操作只用.NET中的System.IO和System.Text命名空间,相比其它的实现方式(比如采用System.Web命名空间)实用性更强...
VC 6.0 基于mfc 打开txt文件在一个对话框窗口中,直接显示出TXT文件的内容,程序功能挺简单的,以下是相关代码: //生成一个对话框 lpszOpenFile = new CFileDialog (TRUE,"","",OFN_FILEMUSTEXIST |OFN_...
DeviceCapabilities 利用这个函数可获得与一个设备的能力有关的信息 DocumentProperties 打印机配置控制函数 EndDocAPI 结束一个成功的打印作业 EndDocPrinter 在后台打印程序的级别指定一个文档的结束 EndPage ...
4.选择 工具——〉选项,在弹出的“选项”对话框中,选择“高级”标签,在高级标签中点击“文件路径”按钮,在弹出的“文件路径”对话框中,点击“加载项”右边的“ ”按钮,选择Visio 2003安装路径(Program Files...
Windows中的通用应用程序的类名 使用API函数复制移动文件 使用API访问ListBox项 使用GetTempFileName创建一个唯一的临时文件 使用INI文件 ...运行一个程序或打开一个关联文件 返回UNC路径 通过CRC-32验证文件
Shift:添加至/取消选择 Ctrl:移动选择锚 N:下一个被选要素 R:切换至旋转模式/从旋转模式切换 F:切换至要素模式/从要素模式切换 E:在Sketch工具、Edit工具和Edit Annotation工具间切换 L:在跟踪要素模式下将...
0214 如何将一个工程中的部分资源加到另一个工程中 104 0215 根据句柄获得窗口对象的方法 104 0216 如何共享MSDN 104 0217 从完整的文件名中去除路径 104 0218 从复合字符串中解析子串 105 0219 如何获得...
14.复制一个文件夹下所有的文件夹到另一个文件夹下 15.移动文件夹 16.移动一个文件夹下所有的文件夹到另一个目录下 17.以一个文件夹的框架在另一个目录创建文件夹和空文件 18.复制文件 19.复制一个文件夹下所有...
AddJob 用于获取一个有效的路径名,以便用它为作业创建一个后台打印文件。它也会为作业分配一个作业编号 AddMonitor 为系统添加一个打印机监视器 AddPort 启动"添加端口"对话框,允许用户在系统可用端口列表中加入...
◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现...
◆如何建立一个基于对话框一程序◆ 23 ◆如何建立一个线程◆ 24 ◆如何让窗口产生一个图标(从应用程序资源中取出)◆ 24 ◆如何得到一个edit的录入的值◆ 24 ◆如何启动TIMER事件◆ 25 ◆如何使用ctrllist控件实现...
15.4 使应用程序在同一时刻只能运行一个实例 15.5 创建选择文件夹的对话框 15.6 使窗口置顶 15.7 使应用程序支持启动参数 15.8 获得程序自身所在的目录 15.9 如何播放WAV文件 15.10 更改选择...
提供了一个高制定性的消息对话框。 Lists.pas 提供了很多个TList的扩展类,是学习很研究TList的好东西。 Calendar.pas 公历与农历换算和时间处理的函数单元,具体看里面的说明。 Clipboards.pas 提供一个剪贴板...
4、 通过上述步骤,我们已经成功地在另一个开发主机上获得保存在SourceSafe的工程。将来如果有新的开发人员加入,只需重复这四个步骤即可。 五、 版本控制的几个概念在Visual Studio.Net开发环境"解决方案资源管理器...