怎样让CFileDialog打开的对话框只显示并返回目录

同上,可以利用SHBrowseForFolder,但是需要先准备一些数据。
我原来写过一个封装起来的函数GetWin32PathName,可以参考一下。
其中加了一个回调函数,可以用来设置初始路径和提示文字的。

typedef   struct   tagGetWin32PathExInfo
{
LPCTSTR   lpszInitialDir;
LPCTSTR   lpszStatusText;
}   GETWIN32PATHEXINFO;

static   int   CALLBACK   BrowseCallbackProc(HWND   hwnd,   UINT   uMsg,   LPARAM   lParam,   LPARAM   lpData)
{
lParam;

if   (uMsg   ==   BFFM_INITIALIZED)
{
GETWIN32PATHEXINFO*   pGetWin32PathExInfo   =   (GETWIN32PATHEXINFO*)lpData;
SendMessage(hwnd,   BFFM_SETSELECTION,   TRUE,   (LPARAM)(pGetWin32PathExInfo-> lpszInitialDir));
SendMessage(hwnd,   BFFM_SETSTATUSTEXT,   0,   (LPARAM)(pGetWin32PathExInfo-> lpszStatusText));
}

return   0;
}

BOOL   GetWin32PathName(LPTSTR   strPathName,   LPCTSTR   strInitialDir,   LPCTSTR   strTitle,   HWND   hwndParent)
{
LPMALLOC   pMalloc;

/*   Gets   the   Shell 's   default   allocator   */
if   (::SHGetMalloc(&pMalloc)   ==   NOERROR)
{
BROWSEINFO   bi;
LPITEMIDLIST   pidl;

GETWIN32PATHEXINFO   gw32PathExInfo;

if   (strInitialDir   ==   NULL)
gw32PathExInfo.lpszInitialDir   =   " ";
else
gw32PathExInfo.lpszInitialDir   =   strInitialDir;

gw32PathExInfo.lpszStatusText   =   strTitle;

//   Get   help   on   BROWSEINFO   struct   -   it 's   got   all   the   bit   settings.
bi.hwndOwner   =   hwndParent;
bi.pidlRoot   =   NULL;
bi.pszDisplayName   =   strPathName;
bi.lpszTitle   =   strTitle;
bi.ulFlags   =   BIF_RETURNFSANCESTORS   |   BIF_RETURNONLYFSDIRS;
bi.lpfn   =   BrowseCallbackProc;
bi.lParam   =   (LPARAM)&gw32PathExInfo;

//   This   next   call   issues   the   dialog   box.
if   ((pidl   =   ::SHBrowseForFolder(&bi))   !=   NULL)
{
if   (::SHGetPathFromIDList(pidl,   strPathName))
{  
//   At   this   point   strPathName   contains   the   selected   path   */
pMalloc-> Free(pidl);
pMalloc-> Release();
return   TRUE;
}
//   Free   the   PIDL   allocated   by   SHBrowseForFolder.
pMalloc-> Free(pidl);
}

//   Release   the   shell 's   allocator.
pMalloc-> Release();
}

return   FALSE;
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值