SHBrowseForFolder来初始化选择目录

CCriticalSection cs;
CString g_strCurrDir;

void SetCurrDirForSHBrowseForFolder(const CString& strCurrDir)
{
 CGuardLock<CCriticalSection> Guard(&cs);
 g_strCurrDir = strCurrDir;
}

int CALLBACK FECFolderProc(HWND hWnd, UINT nMsg, LPARAM, LPARAM lpData)
{
    if (BFFM_INITIALIZED == nMsg)
    { 
  CString szPath("");
  {
   CGuardLock<CCriticalSection> Guard(&cs);
   szPath = g_strCurrDir;
  }
        if (_T("") != szPath.Left(2)) // SHBrowseForFolder does not like UNC path
        {
            int len = szPath.GetLength() - 1;
            if (2 != len && _T('//') == szPath[len])
                szPath.Delete(len); // remove trailing slash (SHBrowseForFolder does not like it)
            ::SendMessage(hWnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)szPath);
        }
    }
    return 0;
}

CString BrowseForFolderBySH(LPCTSTR lpTitle, CWnd* pWnd, CString strCurrDir)
{
 BROWSEINFO  BrowseDir;
 LPCITEMIDLIST pIdl;
 CString   strFolderPath;

 BrowseDir.hwndOwner  = pWnd->m_hWnd;
 BrowseDir.lpszTitle  = lpTitle;
 BrowseDir.pidlRoot  = NULL;
 BrowseDir.ulFlags  = 0;
 BrowseDir.pszDisplayName= strFolderPath.GetBuffer( MAX_PATH );
 BrowseDir.lParam  = (LPARAM)pWnd;
 BrowseDir.lpfn   = NULL;
 if (!strCurrDir.IsEmpty())
 {
  SetCurrDirForSHBrowseForFolder(strCurrDir);
  BrowseDir.lpfn  = FECFolderProc;
 }

 pIdl = SHBrowseForFolder( &BrowseDir );
 strFolderPath.ReleaseBuffer();
 strFolderPath.Empty();
 if ( pIdl != NULL )
 {
  SHGetPathFromIDList( pIdl, strFolderPath.GetBuffer( MAX_PATH ) );
  strFolderPath.ReleaseBuffer();
 }
 return strFolderPath;

主要是用一个回调函数处理特定的消息。

 其它例子:
http://www.codeproject.com/editctrl/fileeditctrl.asp
http://www.codeproject.com/dialog/cfolderdialog.asp

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值