C++选择文件夹代码的封装

本文实例讲述了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++程序设计有所帮助。