class CPathDialog : public CObject
{
public:
CPathDialog(LPCTSTR lpszTitle, LPCTSTR pszInitPath=NULL,HWND hParent=NULL);
virtual ~CPathDialog();
int DoModal();
CString GetPathName() const;
static int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData);
private:
HWND m_hParentWnd;
CString m_strTitle;
int m_nRootFolder;
TCHAR m_szPathName[MAX_PATH];
};
CPathDialog::CPathDialog(LPCTSTR lpszTitle, LPCTSTR pszInitPath,HWND hParent):
m_hParentWnd(hParent),m_strTitle(lpszTitle)
{
if (pszInitPath)
_tcscpy(m_szPathName, pszInitPath);
else
m_szPathName[0] = '\0';
m_nRootFolder = CSIDL_DRIVES;
}
CPathDialog::~CPathDialog()
{
}
int CPathDialog::DoModal()
{
int ret = IDCANCEL;
LPITEMIDLIST pid1 = NULL, pid2 = NULL;
LPMALLOC pMalloc = NULL;
VERIFY(SUCCEEDED(::CoInitialize(NULL)));
if (m_nRootFolder == 0)
{
pid1 = NULL;
}
else
{
if (!SUCCEEDED(SHGetSpecialFolderLocation(m_hParentWnd, m_nRootFolder, &pid1)))
goto Done;
}
if (NOERROR == ::SHGetMalloc(&pMalloc))
{
BROWSEINFO bi;
bi.hwndOwner = m_hParentWnd;
bi.lpfn = &BrowseCallbackProc;
bi.pszDisplayName = m_szPathName;
bi.ulFlags = BIF_STATUSTEXT|BIF_RETURNFSANCESTORS|BIF_RETURNONLYFSDIRS;
bi.lpszTitle = (LPCTSTR)m_strTitle;
bi.pidlRoot = pid1;
bi.lParam = (LPARAM)m_szPathName;
if ((pid2 = ::SHBrowseForFolder(&bi)) != NULL)
{
if (::SHGetPathFromIDList(pid2, m_szPathName))
ret = IDOK;
pMalloc->(Free(pid2));
}
}
if (NULL != pMalloc && pid1 != NULL)
{
pMalloc->Free(pid1);
}
if (pMalloc != NULL)
{
pMalloc->Release();
}
Done:
CoUninitialize();
return ret;
}
CString CPathDialog::GetPathName() const
{
return m_szPathName;
}
int CALLBACK CPathDialog::BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lParam,LPARAM lpData)
{
TCHAR szPath[MAX_PATH] = {'\0'};
switch (uMsg)
{
case BFFM_INITIALIZED:
PostMessage(hwnd, BFFM_SETSELECTION, (WPARAM)1, (LPARAM)lpData);
break;
case BFFM_SELCHANGED:
::SHGetPathFromIDList((LPITEMIDLIST)lParam, szPath);
SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0L, (LPARAM)szPath);
break;
default:
break;
}
return 0;
}
封装一个路径选择对话框
猜你喜欢
转载自blog.csdn.net/zeqi1991/article/details/95042732
今日推荐
周排行