DirDialog.cpp
上传用户:hxb_1234
上传日期:2010-03-30
资源大小:8328k
文件大小:2k
源码类别:

VC书籍

开发平台:

Visual C++

  1. #include "DirDialog.h"
  2. #include <shlobj.h>
  3. static int __stdcall BrowseCtrlCallback(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
  4. {
  5.   CDirDialog* pDirDialogObj = (CDirDialog*)lpData;
  6.   if (uMsg == BFFM_INITIALIZED && !pDirDialogObj->m_strSelDir != NULL)
  7.   {
  8.   
  9.   }
  10.   else 
  11.   {
  12.   }
  13.   return 0;
  14. }
  15. CDirDialog::CDirDialog()
  16. {
  17. this->m_strPath    = (char *) new char[32768];
  18.     this->m_strInitDir = NULL;
  19.     this->m_strSelDir  = NULL;
  20.     this->m_strTitle   = NULL;
  21. }
  22. CDirDialog::~CDirDialog()
  23. {
  24. }
  25. int CDirDialog::DoBrowse()
  26. {
  27.   BROWSEINFO bInfo;
  28.   LPITEMIDLIST pidl;
  29.   ZeroMemory ( (PVOID) &bInfo,sizeof (BROWSEINFO));
  30.   if (m_strInitDir != NULL)
  31.   {
  32.     OLECHAR       olePath[MAX_PATH];
  33.     ULONG         chEaten;
  34.     ULONG         dwAttributes;
  35.     HRESULT       hr;
  36.     LPSHELLFOLDER pDesktopFolder;
  37.     
  38. if (SUCCEEDED(SHGetDesktopFolder(&pDesktopFolder)))
  39.     {
  40.  
  41.       MultiByteToWideChar(CP_ACP, MB_PRECOMPOSED, m_strInitDir, -1,
  42.                           olePath, MAX_PATH);
  43.  
  44.       hr = pDesktopFolder->ParseDisplayName(NULL,
  45.                                             NULL,
  46.                                             olePath,
  47.                                             &chEaten,
  48.                                             &pidl,
  49.                                             &dwAttributes);
  50.       bInfo.pidlRoot = pidl;
  51.     }
  52.   }
  53.  
  54.   bInfo.hwndOwner      = NULL;
  55.   bInfo.pszDisplayName = m_strPath;
  56.   bInfo.lpszTitle      = "Select Directory";
  57.   bInfo.ulFlags        = BIF_RETURNFSANCESTORS | BIF_RETURNONLYFSDIRS;
  58.   bInfo.lpfn           = BrowseCtrlCallback;
  59.   bInfo.lParam         = (LPARAM)this;
  60.   if ((pidl = SHBrowseForFolder(&bInfo)) == NULL)
  61.   {
  62.   return 0;
  63.   }
  64.   m_iImageIndex = bInfo.iImage;
  65.   if (SHGetPathFromIDList(pidl, m_strPath) == FALSE)
  66.   {
  67.     return 0;
  68.   }
  69.   return 1;
  70. }