2010/05/18
SHBrowseForFolder 폴더 선택시 대화상자에 선택된 경로 보여주기
SHBrowseForFolder 이용한 폴더 선택시 대화상자에서 사용자가 폴더를 선택할 때마다 선택된 경로를 대화 상자에 뿌려 주기 위해서는 SHBrowseForFolder 함수를 호출 할 때 넘겨주는 BrowseInfo 객체의 Flag 에 BIF_STATUSTEXT 를 추가하고 Callback 함수를 지정하여 Callback 함수에서 BFFM_SELCHANGED 메세지를 받아서 처리하면 된다.
Original Post : http://neodreamer-dev.tistory.com/441
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;
// 사용자가 폴더를 선택할 경우 대화상자에 선택된 경로 표시
case BFFM_SELCHANGED:
{
TCHAR szText[MAX_PATH] = {0};
SHGetPathFromIDList( (LPCITEMIDLIST)lParam, szText );
SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, (LPARAM)szText );
}
break;
}
return 0; // Always return 0.
}
void CDlgCopy::OnBnClicked()
{
LPITEMIDLIST pidlBrowse;
WCHAR szFolder[MAX_PATH];
CString strInit = "초기 경로";
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)strInit.GetBuffer( strInit.GetLength() );
::ZeroMemory(szFolder, MAX_PATH);
pidlBrowse = ::SHBrowseForFolder(&brInfo);
strInit.ReleaseBuffer();
if ( pidlBrowse != NULL )
{
::SHGetPathFromIDList(pidlBrowse, szFolder);
}
else
{
return;
}
m_strSaveFolder = szFolder;
}
<
Original Post : http://neodreamer-dev.tistory.com/441
Labels:
SHBrowseForFolder
,
ShellAPI
,
TistoryOldPost
,
Win32
,
Win32 API
,
폴더 선택
Subscribe to:
Post Comments
(
Atom
)
No comments :
Post a Comment