BrowseFolder.cpp 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556
  1. //Download by http://www.NewXing.com
  2. #include "stdafx.h"
  3. #include "BrowseFolder.h"
  4. int CALLBACK CBrowseFolder::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
  5. {
  6. CBrowseFolder *pBrowseFolder=(CBrowseFolder *) lpData;
  7. if(uMsg==BFFM_INITIALIZED)
  8. SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM) pBrowseFolder->m_pDirPath);
  9. return 0;
  10. }
  11. CBrowseFolder::CBrowseFolder()
  12. {
  13. m_pDirPath=new char[MAX_PATH];
  14. }
  15. CBrowseFolder::~CBrowseFolder()
  16. {
  17. delete m_pDirPath;
  18. }
  19. int CBrowseFolder::DoModal(CWnd *pParentWnd,const char *pStartPath)
  20. {
  21. LPMALLOC pMalloc;
  22. if(SHGetMalloc(&pMalloc)!=NOERROR)
  23. return -1;
  24. if(pStartPath && IsValuePath(pStartPath))
  25. {
  26. char *pStr=m_pDirPath;
  27. while(*pStr++=*pStartPath++);
  28. }
  29. BROWSEINFO bInfo={pParentWnd->m_hWnd,NULL,0,"ÇëÑ¡ÔñÎļþ¼Ð:",0,BrowseCallbackProc,(LPARAM) this,0};
  30. ITEMIDLIST *pItemList=SHBrowseForFolder(&bInfo);
  31. if(pItemList)
  32. {
  33. SHGetPathFromIDList(pItemList,m_pDirPath);
  34. pMalloc->Free(pItemList);
  35. pMalloc->Release();
  36. return TRUE;
  37. }
  38. pMalloc->Free(pItemList);
  39. pMalloc->Release();
  40. return FALSE;
  41. }
  42. char *CBrowseFolder::GetDirPath()
  43. {
  44. return m_pDirPath;
  45. }
  46. BOOL CBrowseFolder::IsValuePath(const char *pDirPath)
  47. {
  48. DWORD dFileAttrib=GetFileAttributes(pDirPath);
  49. return (dFileAttrib!=0xffffffff && dFileAttrib & FILE_ATTRIBUTE_DIRECTORY)?TRUE:FALSE;
  50. }