카테고리

  • 안드로이드
  • IOS
  • MFC
  • JAVA
  • AWS
  • LAMP
  • 여행&사진
  • 이런저런생활
  • 2015년 11월 5일 목요일

    MFC 디렉토리 선택 다이얼로그

    출처 : http://i0nucleus.egloos.com/2746959

    ITEMIDLIST *pildBrowse;
        char pszPathname[MAX_PATH];
              
        LPITEMIDLIST pidl = NULL;
        BROWSEINFO bInfo;
        ZeroMemory( &bInfo, sizeof(BROWSEINFO) );
              
        SHPathToPidl( CSIDL_DESKTOP, &pidl );       // 루트 디렉토리 설정 부분.
        bInfo.hwndOwner = GetSafeHwnd();
        bInfo.pidlRoot = pidl;
        bInfo.pszDisplayName = pszPathname;
        bInfo.lpszTitle = "Please Select Directory....";
        bInfo.lpfn = BrowseCallbakProc;           
        // 콜백함수가 필요없다면 NULL이나 지움. 위의 static int 함수 필요 없어짐
        bInfo.ulFlags = BIF_RETURNONLYFSDIRS | BIF_EDITBOX | BIF_VALIDATE ;
        // 디렉토리만 설정가능하도록 하였습니다... 플래그 설정은 맨 아래 참조하세요, 또는 MSDN

        pildBrowse = ::SHBrowseForFolder(&bInfo);
              
        if( pildBrowse != NULL )
        {
            SHGetPathFromIDList(pildBrowse, pszPathname);
            m_strDownFolder = (LPCTSTR)pszPathname;  // 선택한 폴더 또는 파일… 이 부분을 목적에 맞게 수정.
            UpdateData(FALSE);                              
        }

    }

    HRESULT CNet_ProgDlg::SHPathToPidl( LPCTSTR szPath, LPITEMIDLIST* ppidl )  // 여기는 클레스 이름 바꾸어야 함.
    {
        LPSHELLFOLDER pShellFolder = NULL;
        OLECHAR wszPath[MAX_PATH] = {0};
        ULONG nCharsParsed = 0;
              
        HRESULT hr = SHGetDesktopFolder( &pShellFolder );
              
        if( FAILED(hr) ) return FALSE;
              
        MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szPath, -1, wszPath, MAX_PATH );
        hr = pShellFolder->ParseDisplayName( NULL, NULL, wszPath, &nCharsParsed, ppidl, NULL );
        pShellFolder->Release();
              
        return hr;
    }

    /*
    // Browsing for directory.
    #define BIF_RETURNONLYFSDIRS   0x0001  // For finding a folder to start document searching
    #define BIF_DONTGOBELOWDOMAIN  0x0002  // For starting the Find Computer
    #define BIF_STATUSTEXT         0x0004
    #define BIF_RETURNFSANCESTORS  0x0008
    #define BIF_EDITBOX            0x0010
    #define BIF_VALIDATE           0x0020   // insist on valid result (or CANCEL)

    #define BIF_BROWSEFORCOMPUTER  0x1000  // Browsing for Computers.
    #define BIF_BROWSEFORPRINTER   0x2000  // Browsing for Printers
    #define BIF_BROWSEINCLUDEFILES 0x4000  // Browsing for Everything
    */
    -bInfo.ulFlags 플래그

    BIF_BROWSEFORCOMPUTER    : 네트워크의 컴퓨터만 선택가능
    BIF_BROWSEFORPRINTER        : 프린터만 선택가능
    BIF_BROWSEINCLUDEFILES      : 파일도 표시
    BIF_DONTGOBELOWDOMAIN  : 네트워크의 컴퓨터를 표시하지 않는다
    BIF_EDITBOX                      : 에디트 박스를 표시한다
    BIF_RETURNFSANCESTORS     : 네트워크의 컴퓨터만 선택가능
    BIF_RETURNONLYFSDIRS        : 폴더만 선택가능
    BIF_STATUSTEXT                  : 스테이터스 텍스트를 표시한다
    BIF_VALIDATE                     : 부정 입력시에, BFFM_VALIDATEFAILED 이벤트




    댓글 없음 :

    댓글 쓰기