SHBrowseForFolder设置默认文件夹

 

网上找了很多设置默认文件夹得方法,但是大多不尽如人意,最后找到了如下代码(自已也改了一些),发现比较合适,给大家分享下。

 

int   CALLBACK   BrowserCallbackProc  

  (//回调函数  

HWND   hWnd,  

UINT   uMsg,  

LPARAM   lParam,  

LPARAM   lpData  

  )  

  {  

  switch(uMsg)  

  {  

  case   BFFM_INITIALIZED: //设置默认选择的文件夹  

::SendMessage(hWnd,BFFM_SETSELECTION,1,lpData);  

break;  

  default:  

break;  

  }  

  return   0;  

  }  

//strTitle 为对话框标题 strDir为默认路径调用结束后strDir为选择的路径

bool   SelDirectory(HWND hWnd,LPCTSTR strTitle,CString& strDir)  

  {  

  BROWSEINFO bi;  

  char szDisplayName[MAX_PATH]   =   {0};  

  bi.hwndOwner =   hWnd;  

  bi.pidlRoot =   NULL;  

  bi.pszDisplayName =   szDisplayName;  

  bi.lpszTitle =   strTitle;  

  bi.ulFlags   =   BFFM_SETSELECTION; 

  bi.lpfn =   BrowserCallbackProc;  

  bi.lParam =   (LPARAM)(LPCTSTR)strDir;  

  bi.iImage =   NULL;  

 

  //   显示目录选择对话框,如果按了取消,那么piid为NULL  

  ITEMIDLIST*   piid   =   ::SHBrowseForFolder(&bi);  

  if(piid==NULL)  

  {  

return   false;  

  }   

  //   得到选择的目录  

  BOOL   bValidPath = ::SHGetPathFromIDList(piid,szDisplayName);  

  if   (!bValidPath)  

  {  

return   false;  

  }  

  LPMALLOC   lpMalloc;  

  VERIFY(NOERROR==::SHGetMalloc(&lpMalloc));  

  lpMalloc->Free(piid);  

  lpMalloc->Release();  

  if('/0'==szDisplayName[0])  

  {  

return   false; //用户选择的可能的虚拟文件系统  

  }  

  strDir   =   szDisplayName;  

  strDir.TrimRight("//");  

  return   true;  

  }

 

调用代码:

CString path;

path="D://实用软件//VC6MSDN";

SelDirectory   (GetSafeHwnd(),"设置了默认文件夹哦",path);  

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值