SHBrowseForFolder 함수를 호출 할 때, BrowseInfo 객체의 lpfn 에 Callback 함수를Flag 에 BIF_VALIDATE 를 지정해야 하고 lParam 에 기본 경로를 설정한다. lParam 에 설정하지 않고 직접 메세지 전달시 지정할 수도 있다.
static int CALLBACK BrowseCallbackProc(
HWND hwnd,UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg)
{
case BFFM_INITIALIZED:
{
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)lpData );
}
break;
}
return 0; // Always return 0.
}
void CDlgCopy::OnBnClicked()
{
LPITEMIDLIST pidlBrowse;
WCHAR szFolder[MAX_PATH];
CString strPath = "초기 경로";
BROWSEINFO brInfo;
::ZeroMemory(&brInfo, sizeof(BROWSEINFO));
brInfo.hwndOwner = m_hWnd;
brInfo.pidlRoot = NULL;
brInfo.pszDisplayName = szFolder;
brInfo.lpszTitle = _T("Copy Folder");
brInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_STATUSTEXT | BIF_VALIDATE;
brInfo.lpfn = BrowseCallbackProc;
brInfo.lParam = (LPARAM)strPath.GetBuffer( strPath.GetLength() );
::ZeroMemory(szFolder, MAX_PATH);
pidlBrowse = ::SHBrowseForFolder(&brInfo);
strPath.ReleaseBuffer();
if ( pidlBrowse != NULL )
{
::SHGetPathFromIDList(pidlBrowse, szFolder);
}
else
{
return;
}
m_strSaveFolder = szFolder;
}
<
Original Post : http://neodreamer-dev.tistory.com/440
No comments :
Post a Comment