2014년 10월 26일 일요일

BROWSEINFO로 폴더를 선택할 때, 처음 보여지는 폴더를 변경하기.(MFC)

콜백루틴(무조건 static)
static int CALLBACK BrowseForFolder_CallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
if(uMsg == BFFM_INITIALIZED)
SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)lpData);
return 0;
}

폴더 선택 다이얼로그 띄우는 함수
BOOL BrowseForFolder(HWND hWnd, CString& strFolder, LPCTSTR lpstrTitle)
{
BOOL bRet = FALSE;
LPTSTR lpstrFolder = (LPTSTR)strFolder.GetBuffer(MAX_PATH); //필요하면 사용.
BROWSEINFO bi;
bi.hwndOwner = hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = NULL;
bi.lpszTitle = lpstrTitle;
bi.ulFlags = BIF_RETURNONLYFSDIRS;
bi.lpfn = BrowseForFolder_CallbackProc; //콜백함수
bi.lParam = (LPARAM)lpstrFolder; //처음에 보여질 폴더. CString 값이면 (LPCSTR)(LPCTSTR)로 형변환해서 사용해도 됨.
LPITEMIDLIST pidlBrowse;
if(pidlBrowse = SHBrowseForFolder(&bi))
{
if(SUCCEEDED(SHGetPathFromIDList(pidlBrowse, lpstrFolder))) //이 아래 부분부터는 필요하면 사용. 아니면 변경해서 사용.
bRet = TRUE;
LPMALLOC pMalloc;
if(SUCCEEDED(SHGetMalloc(&pMalloc)))
{
pMalloc->Free(pidlBrowse);
pMalloc->Release();
}
}
strFolder.ReleaseBuffer();
return bRet;
}

엠파스 검색에서 따옴.

댓글 없음: