본문 바로가기
IT창고/MFC

내컴퓨터 찾아보기

by 창구창고 2008. 2. 14.

📑 목차

    반응형
    #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
    반응형

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