用SHBrowseForFolder在进行文件路径的选择, 先由一个问题时, 我现在由一个默认路径, 我希望在弹出SHBrowseForFolder时, 显示选择默认路径。 请问该如何实现? 

解决方案 »

  1.   

    为SHBrowseForFolder指定初始目录SHBrowseForFolder可以用来得到一个用户选择的目录。可是有时候会有需要去指定一个初始目录,比如希望上次用户选择的目录可以保存下来。这该如何去做?在BROWSEINFO结构体中提供了一个成员,这是一个指向函数的指针,通过这个回调函数,可以处理初始化的时候需要做的一些事情。具体写法如下:  static TCHAR g_szLastSelDir[MAX_PATH]   ;  
     
      int   CALLBACK   BrowseCallbackProc(HWND   hwnd,   UINT   msg,   LPARAM   lp,   LPARAM   pData)  
      {  
              if   (msg   ==   BFFM_INITIALIZED   )  
              {  
                      ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)g_szLastSelDir);  
              }  
              return   0;  
      }  
       
      BOOL   BrowseDirectory(HWND   hwnd,   LPSTR   lpszDir,   DWORD   dwLen)  
      {  
              lstrcpyn(g_szLastSelDir,   lpszDir,     sizeof(g_szLastSelDir))   ;  
       
              BROWSEINFO   bi;  
              bi.hwndOwner=hwnd;  
              bi.pidlRoot=0;  
              bi.pszDisplayName=0;  
              bi.lpszTitle="Browse   Directory";  
              bi.lpfn=BrowseCallbackProc;  
              bi.lParam=0;  
              bi.ulFlags=   BIF_STATUSTEXT   |   BIF_USENEWUI   |   BIF_RETURNONLYFSDIRS;  
               
              LPITEMIDLIST   pidl   ;  
              if   (pidl   =   SHBrowseForFolder(&bi))  
              {      
                      SHGetPathFromIDList(pidl,   lpszDir);                    _tcscpy(g_szLastSelDir, lpszDir);
                      return   TRUE   ;  
              }  
              return   FALSE   ;  
      }
      

  2.   

    说明下,你只需要
      int   CALLBACK   BrowseCallbackProc(HWND   hwnd,   UINT   msg,   LPARAM   lp,   LPARAM   pData)  
      {  
              if   (msg   ==   BFFM_INITIALIZED   )  
              {  
                      ::SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)g_szLastSelDir);  
              }  
              return   0;  
      }  把这里的g_szLastSelDir换成你需要的默认目录即可。