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