본문 바로가기
IT창고

내컴퓨터 찾아 보기

by 창구창고 2009. 2. 26.
반응형
#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
반응형

"이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다."