//
// 폴더선택 다이얼로그를 구현하기 위해 사용되는 사용자정의 Callback 함수
//
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg) {
// 폴더선택 다이얼로그의 초기화가 끝난 경우
case BFFM_INITIALIZED:
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
break;
}
return 0;
}
//
// 폴더선택 다이얼로그
//
void SelectFolder()
{
ITEMIDLIST *pidlBrowse;
WCHAR pszPathname[MAX_PATH];
BROWSEINFO BrInfo;
BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.pidlRoot = NULL;
memset(&BrInfo, 0x00, sizeof(BrInfo));
BrInfo.pszDisplayName = pszPathname;
BrInfo.lpszTitle = _T("Select folder");
BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;
// 이벤트에 대한 사용자정의 함수
BrInfo.lpfn = BrowseCallbackProc;
// 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다.
// 예를들어 초기폴더경로를 C드라이브로 설정하는 경우
CString strInitPath = _T("C:\\");
BrInfo.lParam = (LPARAM)strInitPath.GetBuffer();
pidlBrowse = ::SHBrowseForFolder(&BrInfo);
if(pidlBrowse != NULL)
{
// 선택된 폴더 경로얻음
SHGetPathFromIDList(pidlBrowse, pszPathname);
// 경로(pszPathname)를 이용하여 이후작업 추가
}
}