您的位置:首页 > 其它

SHBrowseForFolder设置默认文件夹

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

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);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: