①、目录选择对话框:
TCHAR szPath[MAX_PATH] = {0};
BROWSEINFO mBroInfo = {0};
mBroInfo.hwndOwner = m_hWnd;
ITEMIDLIST *pidl = SHBrowseForFolder(&mBroInfo);
if (SHGetPathFromIDList(pidl, szPath)){
SetDlgItemText(IDC_PATH_EDIT, szPath);
}
CoTaskMemFree(pidl);
#####################################################
②、目录选择对话框的初始化选择路径:
mBroInfo.lpfn = BrowseCallbackProc;
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg == BFFM_INITIALIZED){
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)_T("D:\\Program Files\\SoftWare"));
}
return 0;
}
#####################################################
③、目录选择对话框的根目录设定:
LPITEMIDLIST GetItemIDListFromPath(CString strPath)
{
if (strPath.IsEmpty())
return NULL;
LPSHELLFOLDER pDesktopFolder = NULL;
HRESULT hr = SHGetDesktopFolder(&pDesktopFolder);
if (FAILED(hr))
return NULL;
PWCHAR pWchar = NULL;
#ifdef _UNICODE
pWchar = (LPTSTR)(LPCTSTR)strPath;
#else
USES_CONVERSION;
pWchar = A2W(strPath);
#endif
LPITEMIDLIST pItemIDList = NULL;
hr = pDesktopFolder->ParseDisplayName(NULL, NULL, pWchar, NULL, &pItemIDList, NULL);
pDesktopFolder->Release();
if ( FAILED(hr))
return NULL;
return pItemIDList;
}
#####################################################
④、让对话框程序支持拖拽
1> 对话框模版的 Accept Files 属性设置成 True;
2> 响应主对话框类的 WM_DROPFILES 消息;
3> 添加如下示例代码:
TCHAR szPath[MAX_PATH] = {0};
UINT nCount = DragQueryFile(hDropInfo, 0xFFFFFFFF, NULL, 0);
for(UINT idx = 0; idx < nCount; ++idx) {
DragQueryFile(hDropInfo, idx, szPath, MAX_PATH);
MessageBox(szPath);
}
DragFinish(hDropInfo);
------------------------------------- End -------------------------------------------