반응형
#pragma region 내컴퓨터 찾아 보기
void CShellView::OnShellMycomfind()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
ITEMIDLIST *pidlBrowse;
char pszPathName[MAX_PATH];
CString strPath;
lstrcpy (pszPathName, strPath.GetBuffer(strPath.GetLength()));
BROWSEINFO BrInfo;
memset(&BrInfo, 0, sizeof(BrInfo));
BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.pidlRoot = NULL;
BrInfo.pszDisplayName = pszPathName;
BrInfo.lpszTitle = "이동할 위치를 선택한 다음 [확인] 단추를 클릭하십시오.";
BrInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE ;
BrInfo.lpfn = BrowseCallbackProc;
BrInfo.lParam = (LPARAM)pszPathName;
pidlBrowse = ::SHBrowseForFolder(&BrInfo);
if( pidlBrowse == NULL)
return;
::SHGetPathFromIDList(pidlBrowse, pszPathName); // 폴더명 얻기 pszPathName
strPath.Format("%s", pszPathName);
m_wndShellList.DisplayFolder(strPath);
}
#pragma endregion
#pragma region 내 컴퓨터 찾아보기 CallBack 함수
int CShellView::BrowseCallbackProc(HWND hwnd, UINT uMsg , LPARAM lParam , LPARAM dwData)
{
CShellView * PDlg = (CShellView *) AfxGetMainWnd();
TCHAR * szDir;
szDir = (TCHAR * )(LPSTR)(LPCTSTR) dwData;
//dwData는 콜백함수 호출시 LPARAM으로 넘겨주는 특정 디렉트로 패스 입니다.
// 이 인자를 이용해서 폴더지정하는 대화상자가 처음 초기화 될때
//넘겨준 인자의 폴더가 선택되어지게 합니다.
switch(uMsg)
{
case BFFM_INITIALIZED:
{
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
//대화상자가 초기화 될때 szDir 폴더를 선택하게 해준다.
}
break;
case BFFM_SELCHANGED:
{
TCHAR szText[MAX_PATH] = {0};
SHGetPathFromIDList(reinterpret_cast<LPITEMIDLIST>(lParam), szText);
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, reinterpret_cast<LPARAM>(szText));
//폴더를 선택했을때 에디트에 폴더명을 보여주는 부분
}
break;
case BFFM_VALIDATEFAILED:
{
CString str;
str.Format("\"%s\" 폴더 경로는 잘못되었습니다.", reinterpret_cast<LPTSTR>(lParam));
AfxMessageBox(str);
return 1;
}
}
return 0;
}
#pragma endregion
void CShellView::OnShellMycomfind()
{
// TODO: 여기에 명령 처리기 코드를 추가합니다.
ITEMIDLIST *pidlBrowse;
char pszPathName[MAX_PATH];
CString strPath;
lstrcpy (pszPathName, strPath.GetBuffer(strPath.GetLength()));
BROWSEINFO BrInfo;
memset(&BrInfo, 0, sizeof(BrInfo));
BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.pidlRoot = NULL;
BrInfo.pszDisplayName = pszPathName;
BrInfo.lpszTitle = "이동할 위치를 선택한 다음 [확인] 단추를 클릭하십시오.";
BrInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE ;
BrInfo.lpfn = BrowseCallbackProc;
BrInfo.lParam = (LPARAM)pszPathName;
pidlBrowse = ::SHBrowseForFolder(&BrInfo);
if( pidlBrowse == NULL)
return;
::SHGetPathFromIDList(pidlBrowse, pszPathName); // 폴더명 얻기 pszPathName
strPath.Format("%s", pszPathName);
m_wndShellList.DisplayFolder(strPath);
}
#pragma endregion
#pragma region 내 컴퓨터 찾아보기 CallBack 함수
int CShellView::BrowseCallbackProc(HWND hwnd, UINT uMsg , LPARAM lParam , LPARAM dwData)
{
CShellView * PDlg = (CShellView *) AfxGetMainWnd();
TCHAR * szDir;
szDir = (TCHAR * )(LPSTR)(LPCTSTR) dwData;
//dwData는 콜백함수 호출시 LPARAM으로 넘겨주는 특정 디렉트로 패스 입니다.
// 이 인자를 이용해서 폴더지정하는 대화상자가 처음 초기화 될때
//넘겨준 인자의 폴더가 선택되어지게 합니다.
switch(uMsg)
{
case BFFM_INITIALIZED:
{
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)szDir);
//대화상자가 초기화 될때 szDir 폴더를 선택하게 해준다.
}
break;
case BFFM_SELCHANGED:
{
TCHAR szText[MAX_PATH] = {0};
SHGetPathFromIDList(reinterpret_cast<LPITEMIDLIST>(lParam), szText);
::SendMessage(hwnd, BFFM_SETSTATUSTEXT, 0, reinterpret_cast<LPARAM>(szText));
//폴더를 선택했을때 에디트에 폴더명을 보여주는 부분
}
break;
case BFFM_VALIDATEFAILED:
{
CString str;
str.Format("\"%s\" 폴더 경로는 잘못되었습니다.", reinterpret_cast<LPTSTR>(lParam));
AfxMessageBox(str);
return 1;
}
}
return 0;
}
#pragma endregion
반응형
"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."