本文实例讲述了C++选择文件夹代码的封装,分享给大家供大家参考。具体方法如下:
该实例分为DirDialog.h头文件与DirDialog.cpp源文件。
DirDialog.h头文件代码如下:
#pragma once #ifndef __DIRDIALOG_H_HH #define __DIRDIALOG_H_HH#include <Shlobj.h>
class CDirDialog { protected: BROWSEINFO m_bi; char m_szDisplayName[MAX_PATH]; //显示名称 char m_szPath[MAX_PATH]; //选择的目录 public: //显示对话框 BOOL DoBrowse(HWND hwndOwner, LPTSTR pszDisplayName); LPCTSTR GetPath(){return m_szPath;}; CDirDialog(void); ~CDirDialog(void); }; #endif
DirDialog.cpp源文件代码如下:
#include "DirDialog.h"CDirDialog::CDirDialog(void) { ::ZeroMemory((void*)&m_bi, sizeof(BROWSEINFO)); memset(m_szDisplayName, 0, MAX_PATH); memset(m_szPath, 0, MAX_PATH); m_bi.hwndOwner = NULL; m_bi.pidlRoot = NULL; m_bi.lpszTitle = "请选择文件夹"; m_bi.ulFlags = BIF_RETURNONLYFSDIRS ; m_bi.lpfn = NULL; m_bi.lParam = NULL; m_bi.iImage = NULL; } BOOL CDirDialog::DoBrowse(HWND hwndOwner, LPTSTR pszTitle) { m_bi.hwndOwner = hwndOwner; m_bi.lpszTitle = pszTitle; PIDLIST_ABSOLUTE pItem = ::SHBrowseForFolderA(&m_bi); if (pItem != NULL) { ::SHGetPathFromIDListA(pItem, m_szPath); return TRUE; } return FALSE; } CDirDialog::~CDirDialog(void) { }
使用时的代码如下:
CDirDialog dir; if (dir.DoBrowse(hwndDlg, "title")) { ::MessageBoxA(hwndDlg, dir.GetPath(), "", MB_OK); }
希望本文所述对大家的C++程序设计有所帮助。