目录选择对话框

来源:百度文库 编辑:神马文学网 时间:2024/04/26 19:26:36
char   szDir[MAX_PATH];   
LPMALLOC pMalloc = NULL;
  BROWSEINFO   bi;   
  ITEMIDLIST   *pidl;   
    
  bi.hwndOwner   =   this->m_hWnd;  
  bi.pidlRoot   =   NULL;  
  bi.pszDisplayName   =   szDir;  
  bi.lpszTitle   =   "请选择目录";  
  bi.ulFlags   =   BIF_RETURNONLYFSDIRS;  
  bi.lpfn   =   NULL;  
  bi.lParam   =   0;  
  bi.iImage   =   0;  
   
  pidl   =   SHBrowseForFolder(&bi);  
  if(pidl   ==   NULL)  
      return;  
  if(!SHGetPathFromIDList(pidl,   szDir))    
  return;
    if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)
    {
        pMalloc->Free(pidl);
        pMalloc->Release();
    }




如何从当前目录的文件夹浏览
点击这里查看逐句中英文对照机器翻译
查看机器翻译免责声明
不再更新的 KB 内容免责声明

查看本文应用于的产品
本页概要
更多信息
示例代码
展开全部 | 关闭全部
概要榛樿鎯呭喌涓嬶,SHBrowseForFolder API 使用户可以在浏览外壳的命名空间,并选取一个文件夹在桌面上启动。 通常,您可能更愿意您的应用程序启动文...榛樿鎯呭喌涓嬶,SHBrowseForFolder API 使用户可以在浏览外壳的命名空间,并选取一个文件夹在桌面上启动。 通常,您可能更愿意您的应用程序启动文件夹,用户可能希望,如当前的工作目录的浏览对话框。

若要设置浏览对话框的初始选定区域,BROWSEINFO 结构必须包含一个回调函数。 回调函数调用与消息 BFFM_INITIALIZED 时, 它又可以发送到所需的路径设置对话框选择 BFFM_SETSELECTION 消息。
回到顶端
更多信息下面是一些示例代码,将显示与当前选定的目录浏览对话框的。 它还会在对话框的状态窗口中显示当前所选文件夹的路径。 示例代码 #define STRICT #inc...下面是一些示例代码,将显示与当前选定的目录浏览对话框的。 它还会在对话框的状态窗口中显示当前所选文件夹的路径。
回到顶端
示例代码
#define STRICT
#include
#include

INT CALLBACK BrowseCallbackProc(HWND hwnd,
                                UINT uMsg,
                                LPARAM lp,
                                LPARAM pData)
{
   TCHAR szDir[MAX_PATH];

   switch(uMsg)
   {
   case BFFM_INITIALIZED:
      if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR), szDir))
      {
         // WParam is TRUE since you are passing a path.
         // It would be FALSE if you were passing a pidl.
         SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
      }
      break;

   case BFFM_SELCHANGED:
      // Set the status window to the currently selected path.
      if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))
      {
         SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);
      }
      break;
   }
   return 0;
}


int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR lpszCmdLine,
                     int nCmdShow)
{
   BROWSEINFO bi;
   TCHAR szDir[MAX_PATH];
   LPITEMIDLIST pidl;
   LPMALLOC pMalloc;

   if (SUCCEEDED(SHGetMalloc(&pMalloc)))
   {
      ZeroMemory(&bi,sizeof(bi));
      bi.hwndOwner = NULL;
      bi.pszDisplayName = 0;
      bi.pidlRoot = 0;
      bi.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT;
      bi.lpfn = BrowseCallbackProc;

pidl = SHBrowseForFolder(&bi);
if (pidl)
{
    //
    // Other code omited
    //
    pMalloc->lpVtbl->Free(pMalloc,pidl);
}
pMalloc->lpVtbl->Release(pMalloc);
      }
   }
   return 0;
}