举例:
 CFoldersDialog cFolderDlg;
 cFolderDlg.BrowseFolder(m_hWnd,&m_strDirPath,_T("请选择文件夹"));
浏览文件夹的对话框会显示“请选择文件夹”提示字符,确定之后的文件夹路径会返回到m_strDirPath中,取消后不返回。
// FoldersDialog.cpp: implementation of the CFoldersDialog class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "FoldersDialog.h"
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CFoldersDialog::CFoldersDialog()
{
}
CFoldersDialog::~CFoldersDialog()
{
}
int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData) 
{
 switch(uMsg) 
 {
  case BFFM_INITIALIZED: 
   ::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, pData);
     break;
  default:
     break;
 }
 return 0;
}
int CFoldersDialog::BrowseFolder(HWND hWnd, CString* pBrowsePath, LPSTR strTitle)
{
 BROWSEINFO bi;
 TCHAR szDir[MAX_PATH];
 LPITEMIDLIST lpidlBrowse;
 CString BrowsePath;
 if (pBrowsePath == NULL || hWnd == NULL)
  return FALSE;
 BrowsePath = *pBrowsePath;
 if(BrowsePath != "")
 {
  if(BrowsePath.Right(1) == "\\")
   BrowsePath = BrowsePath.Left(BrowsePath.GetLength() - 1);   //删除末尾的"\\"
 }
 ZeroMemory(&bi,sizeof(BROWSEINFO));
 bi.hwndOwner = hWnd;
 bi.lpszTitle = strTitle;
 bi.ulFlags = BIF_RETURNONLYFSDIRS;
 bi.lpfn = BrowseCallbackProc;
 bi.lParam = (LPARAM)pBrowsePath->GetBuffer(0);
 lpidlBrowse = SHBrowseForFolder(&bi);
 if (lpidlBrowse) 
 {
    SHGetPathFromIDList(lpidlBrowse,szDir);
    pBrowsePath->Format("%s",szDir);
 }
 return TRUE;
}
/**************************************************************************/
// FoldersDialog.h : header file
//
#if !defined(AFX_FOLDERSDIALOG_H_INCLUDED_)
#define AFX_FOLDERSDIALOG_H_INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CFoldersDialog dialog
class CFoldersDialog  
{
public:
 CFoldersDialog();
 virtual ~CFoldersDialog();
 int BrowseFolder(HWND hWnd, CString* pRootPath, LPSTR strTitle);
};
#endif // !defined(AFX_FOLDERSDIALOG_H_INCLUDED_)
/***************************************************************************/

评论