"파일/디렉토리 설정" [開發] 기타 프로그래밍

안녕하세요!

초보 프로그래머입니다 ^^;

다름이 아니라 저처럼 초보분들은 아마도 쉬운것부터 하나하나 잘 모르실꺼에요~

그래서 이거 해도 모르고 저거 해도 모르니 devpia vc++을 찾게 되죠 아니면 naver ㅎㅎ

 

오늘은 쉽게 파일/디렉토리를 찾을수 있는 버튼을 만들어 보겠습니다 ^^

저는 OnMoveRoot()라는 버튼을 호출하는 함수를 만들었습니다.

 

void CEzCaptureMonitorDlg::OnMoveRoot()

{

    // Text 박스에 바로바로 Update.

    UpdateData(TRUE);

    BROWSEINFO bi;

 

    int     nRtn            = 0;

    TCHAR   pszfrom[1024];

    memset( pszfrom, 0x00, sizeof(pszfrom));

    TCHAR szDir[MAX_PATH];

    LPITEMIDLIST pidl;

    LPMALLOC pMalloc;

    // 경로를 담을 변수들.

    CString cstrPath         = "";

    CString strFrom          = "";

    CString strTempDirectory = "";

 

    // 할당된 함수의 주소를 얻어옴.

    if (SUCCEEDED(SHGetMalloc(&pMalloc))) {

        ZeroMemory(&bi,sizeof(bi));

 

        bi.hwndOwner = this->m_hWnd;

        bi.pszDisplayName = 0;

        bi.pidlRoot = NULL;

    

        strTempDirectory = m_sMoveTxt;

 

        bi.ulFlags = BIF_BROWSEINCLUDEFILES | BIF_STATUSTEXT ;

        bi.lpfn = BrowseCallbackProc; // CALLBACK함수 호출.

        bi.lParam = (LPARAM)(LPCSTR)strTempDirectory;

        

        // LPITEMIDLIST의 객체 pidl가  NULL이면 취소.

        // 선택한 파일이나 경로를 보여주기 위해 pidl 저장.

        pidl = SHBrowseForFolder(&bi);

        if (pidl)

        {

            // 찾은 경로나 파일을 맴버변수에 저장.

            if (SHGetPathFromIDList(pidl,szDir))

            {

                cstrPath.Format("%s", szDir);

                // 맴버변수 m_sMoveTxt에 저장.

                m_sMoveTxt  = cstrPath;

            }

            pMalloc->Free(pidl);

        }

        // 할당된 함수를 반환함.

        pMalloc->Release();

    }

 

    // Root Change

    WriteInIFile();

    

    UpdateData(FALSE);

}

 

위 소스가 버튼을 눌렀을때 호출되는 함수입니다.

어렵지 않게 따라 해 보실수 있을꺼구요 이제 CALLBACK함수입니다. 이부분은

위 버튼 함수보다 소스상으로 위에 정의 되야 합니다 ^^

 

int CALLBACK BrowseCallbackProc(HWND hwnd,UINT uMsg,LPARAM lp, LPARAM pData)

{

    TCHAR szDir[MAX_PATH];

    

    switch(uMsg)

    {

    case BFFM_INITIALIZED:

        {

            if (GetCurrentDirectory(sizeof(szDir)/sizeof(TCHAR),

                szDir))

            {

                // WParam 이 TRUE면 경로를 가져옴.

                SendMessage(hwnd,BFFM_SETSELECTION,TRUE,(LPARAM)szDir);

            }

            SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE,  (LPARAM)pData);

            break;

            

        }

    case BFFM_SELCHANGED:

        {

            // 다이얼로그에 선택한 경로를 보여줌.

            if (SHGetPathFromIDList((LPITEMIDLIST) lp ,szDir))

            {

                SendMessage(hwnd,BFFM_SETSTATUSTEXT,0,(LPARAM)szDir);

            }

            break;

        }

    default:

        break;

    }

    return 0;

}

 

자 다 되셨으면 버튼을 클릭해 보세요~

그럼 아래 그림처럼 선택할수 있는 Dialog가 나타납니다~

선택하고 OK 누르시면 정의하신 변수나 기타등등에 빨간색부분의 경로가

저장 되게 됩니다.

img3.gif

 

 

휴~ 어렵지도 않은건데 제가 설명이 좀 부족할지 모르겠네요 ㅠㅠ;

아무튼 저처럼 초보분들이 자주 찾아보는 자료에 대해 제가 아는한 조금씩

업그레이드 하겠습니다~

부족한 부분이 아주 많을텐데 지적 부탁 드릴께요 ^^

 

감사합니다 (__)

ET.





--------------------------------------------------------------------------------------


덧글

댓글 입력 영역