#include "stdafx.h" #include "resource.h" #include "BrowseForFolder.h" #include "comdef.h" #ifdef _DEBUG #undef THIS_FILE static char THIS_FILE[]=__FILE__; #define new DEBUG_NEW #endif CBrowseForFolder::CBrowseForFolder() { } CBrowseForFolder::~CBrowseForFolder() { } BOOL CBrowseForFolder::BrowseForFolder(HWND hWnd,CString& sFolder,LPCTSTR lpszTitle,UINT nFlags) { CString strResult = _T(""); LPMALLOC lpMalloc; if (::SHGetMalloc(&lpMalloc) != NOERROR) { return FALSE; } TCHAR szBuffer[_MAX_PATH]; BROWSEINFO browseInfo; TCHAR szDisplayName[_MAX_PATH]; browseInfo.hwndOwner = hWnd; browseInfo.pidlRoot = NULL; browseInfo.pszDisplayName = szDisplayName; browseInfo.lpszTitle = _bstr_t(lpszTitle); browseInfo.ulFlags = nFlags; browseInfo.lpfn = NULL; browseInfo.lParam = 0; LPITEMIDLIST lpItemIDList; if ((lpItemIDList = ::SHBrowseForFolder(&browseInfo)) != NULL) { if (::SHGetPathFromIDList(lpItemIDList, szBuffer)) { if (szBuffer[0] == _T('\0')) { AfxMessageBox(_T("获取路径失败!"),MB_ICONSTOP | MB_OK); sFolder = strResult; return FALSE; } sFolder = szBuffer; return TRUE; } else { AfxMessageBox(_T("获取路径失败!"),MB_ICONSTOP|MB_OK); sFolder = strResult; return FALSE; } lpMalloc->Free(lpItemIDList); lpMalloc->Release(); } else { return FALSE; } sFolder = strResult; return TRUE; }