VC++ MFC 实现:选择文件夹和文件对话框

4星 · 超过85%的资源 需积分: 47 325 下载量 29 浏览量 更新于2024-10-09 3 收藏 16KB DOCX 举报
"在VC++和MFC中实现选择文件夹和文件的对话框功能,主要是通过使用Windows API中的特定函数来完成。本资源详细介绍了如何在MFC应用程序中使用`BROWSEINFO`结构和`SHBrowseForFolder`函数来创建一个选择文件夹的对话框,以及如何设置和获取选定的工作目录。" 在MFC应用程序中,当需要让用户选择一个文件夹或文件时,通常会使用系统提供的标准对话框。对于选择文件夹,我们可以利用Windows Shell API中的`SHBrowseForFolder`函数。这个函数允许用户在图形界面中浏览并选择一个文件夹,然后返回选定文件夹的标识列表(PIDL)。 首先,我们需要定义并初始化`BROWSEINFO`结构,这是`SHBrowseForFolder`函数的输入参数。结构中的成员包括: 1. `hwndOwner`:对话框的父窗口句柄,可以设为NULL表示无父窗口。 2. `pidlRoot`:指定对话框打开时的初始位置,设为NULL则从根目录开始。 3. `pszDisplayName`:用于存储用户选择的文件夹名称,可以设为缓冲区地址。 4. `lpszTitle`:对话框的标题,可以自定义。 5. `ulFlags`:控制对话框的行为,如`BIF_BROWSEINCLUDEFILES`包含文件,`BIF_EDITBOX`允许编辑。 6. `lpfn`:回调函数指针,用于处理对话框中的事件,这里设为NULL,使用默认行为。 7. `lParam`:传递给回调函数的参数。 8. `iImage`:图标索引,通常设为 IDR_MAINFRAME。 接下来,调用`SHBrowseForFolder`函数显示选择文件夹的对话框,如果用户选择了文件夹,函数会返回一个指向选定文件夹PIDL的指针。然后,我们可以通过`SHGetPathFromIDList`函数将PIDL转换为实际的文件路径字符串。 最后,为了释放由`SHBrowseForFolder`分配的内存,我们需要使用`SHGetMalloc`函数获取一个`IMalloc`接口实例,然后通过该接口的`Free`方法释放PIDL,并调用`Release`方法释放`IMalloc`接口。 在描述的场景中,代码还展示了如何使用`CString`对象`sFolderPath`保存选择的文件夹路径,并通过`MessageBox`显示选择结果。此外,`TRACE`语句用于调试,输出选择的文件夹路径。 通过以上步骤,开发者可以在MFC程序中实现一个基本的文件夹选择对话框,让用户能够方便地选择工作目录或其他需要的文件夹。同样,选择文件的功能可以使用`CFileDialog`类来实现,它提供了更灵活的选项,如过滤文件类型等。