`
kmplayer
  • 浏览: 509829 次
  • 性别: 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 ( );
		}
	} 
}

分享到:
评论

相关推荐

    android文件选择对话框

    在Android开发中,文件选择对话框是一个非常常见的功能,它允许用户从设备的存储空间中选取所需的文件或目录。在Android应用中实现这样的功能,通常需要自定义一个对话框或者使用系统提供的Intent来完成。本篇文章将...

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

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

    VC实现使用文件对话框获取文件路径

    总结起来,通过以上步骤,你可以利用VC++的MFC库中的CFileDialog类实现一个基本的文件对话框,让用户选择文件并获取其路径。对于初学者来说,掌握这一基础知识可以让你的程序更加友好,能够有效地与用户交互。同时,...

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

    本篇文章将深入探讨如何在MFC应用程序中实现一个功能,让用户通过按钮触发一个对话框来选择文件夹,并将所选路径显示在编辑控件(Edit Control)中。这个过程涉及到`BROWSEINFO`结构,它是Windows API中用于实现文件...

    对话框打开指定路径的bmp图像

    1. **创建控件**:首先,在对话框资源中添加一个CStatic控件,这个控件通常用来显示静态文本或者图像。在设计阶段,我们可以将其初始大小设置为预期图像的尺寸。 2. **获取图像数据**:使用标准的文件操作函数,如`...

    qt 自定义实现文件选择框

    本篇文章将详细讲解如何在Qt中自定义实现一个文件选择框,并修改其样式以保持与桌面应用的整体设计一致。 首先,我们需要了解Qt中的QFileDialog类,它是用于打开和保存文件的标准对话框。然而,QFileDialog的默认...

    通用对话框用法例子

    在Windows编程中,通用对话框(Common Dialog Box)是一个重要的组成部分,它允许用户与应用程序进行交互,执行常见的文件操作,如打开、保存文件,选择颜色,打印等。本示例将详细讲解通用对话框的使用方法,以帮助...

    js弹出保存对话框

    此方法会弹出一个文件夹选择对话框,允许用户选择一个文件夹,并返回该文件夹的对象。 ##### 3. 获取选中的文件夹路径 ```javascript if (Folder != null) { Folder = Folder.items(); Folder = Folder.item(); ...

    利用Commondialog选择多个文件并获取各文件路径的方法(VB6.0)

    现在,我们需要一个事件来触发文件选择对话框的打开。通常,我们可以使用一个按钮的`Click`事件,如下: ```vb Private Sub cmdOpen_Click() cdlgOpenFiles.ShowOpen End Sub ``` 当用户点击这个按钮时,`Show...

    C++ 多文件/多目录选择 选择框

    在C++编程中,创建一个可以允许用户同时选择多个文件和目录的对话框是一个常见的需求。这个场景通常出现在文件管理器、备份工具或者任何需要批量处理文件和目录的应用程序中。"C++ 多文件/多目录选择 选择框"指的是...

    MFC 拖曳文件获得文件路径

    使用`DragQueryFile`函数可以依次获取每个文件的路径,该函数接受`hdrop`和文件索引作为参数,返回的是一个字符串,即文件的完整路径。例如: ```cpp void CMyWnd::OnDropFiles(HDROP hDropInfo) { // 获取拖放的...

    javaScrip里面怎么调用保存和另存为对话框

    在探讨如何在JavaScript中触发保存或另存为对话框的问题时,我们首先需要理解,由于浏览器的安全限制,直接从客户端脚本(如JavaScript)中触发一个保存或另存为的对话框是受到严格限制的。然而,有几种方法可以绕过...

    MFC基于对话框 存储txt文件

    3. 在OnSaveButtonClicked()函数中,首先打开一个文件对话框,让用户选择保存的TXT文件路径。可以使用CDocument::OnFileSaveAs()或CFileDialog类来实现这一功能。 4. 使用CFile类的构造函数打开或创建选中的TXT文件...

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

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

    VC获取当前程序文件的路径,文件名以及路径+文件名

    VC 获取当前程序文件的路径、文件名以及路径+文件名...获取当前程序文件的路径、文件名以及路径+文件名是 VC++ 中的一个常见问题,本文为大家介绍了两种经典的解决方案,同时也讨论了 CFileDialog 对话框的使用方法。

    MATLAB中读取数据记忆上次的选择路径

    - **文件选择对话框**:使用 `uigetfile` 显示文件选择对话框,用户可以选择一个 `.asc` 文件。 - **路径更新**:如果用户选择了文件,则更新 `newpath` 为该文件所在的路径。 - **读取文件**:使用 `fopen` 和 `...

    qt学习——内置对话框

    例如,点击一个“打开”按钮可能会触发`QFileDialog`,选择的文件路径则通过槽函数传递回应用程序进行处理。 在项目构建方面,`.ncb`文件是Visual Studio的旧版项目文件,`.sln`是解决方案文件,用于管理和组织多个...

    OPENCV对话框打开处理图像

    完成向导后,你会得到一个基本的对话框框架。 在对话框类的头文件中,我们需要包含OpenCV的头文件,例如`#include <opencv2/opencv.hpp>`。然后,声明一个成员变量来存储加载的图像,如`cv::Mat image;`。你还需要...

    未公开API函数揭秘——通用对话框...

    另一个未公开的API函数是`RunFileDlg`,用于显示一个自定义的运行文件对话框。函数原型如下: ```c++ void WINAPI RunFileDlg(HWND hwndOwner, HICON hIcon, LPCSTR lpstrDirectory, LPCSTR lpstrTitle, LPCSTR ...

    对话框CommonDialog1的应用,演示打开、保存、显示颜色对话框、字体和打印等。

    开发者可以预设一个初始颜色,对话框会显示一个颜色选择面板,用户可以选择喜欢的颜色。一旦用户确定了颜色,`ColorDialog`会返回所选颜色的RGB值,供程序使用。 **字体对话框(FontDialog)** `FontDialog`对话框...

Global site tag (gtag.js) - Google Analytics