폴더선택 다이얼로그와 초기폴더경로 설정

이렇게 폴더 선택 다이얼로그가 필요해서 구글링 해서 여기 정리해둠

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
switch (uMsg) {
// 폴더선택 다이얼로그의 초기화가 끝난 경우
case BFFM_INITIALIZED:
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
break;
}
return 0;
}
void CSetupDlg::OnBnClickedButtonSetPath()
{
// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
ITEMIDLIST *pidlBrowse;
WCHAR pszPathname[MAX_PATH];
BROWSEINFO BrInfo;
BrInfo.hwndOwner = GetSafeHwnd();
BrInfo.pidlRoot = NULL;
memset(&BrInfo, 0x00, sizeof(BrInfo));
BrInfo.pszDisplayName = pszPathname;
BrInfo.lpszTitle = _T("Select folder");
BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;
// 이벤트에 대한 사용자정의 함수
BrInfo.lpfn = BrowseCallbackProc;
// 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다.
CString strInitPath = SMI.GetSaveFolder().c_str();
BrInfo.lParam = (LPARAM)strInitPath.GetBuffer();
pidlBrowse = ::SHBrowseForFolder(&BrInfo);
if(pidlBrowse != NULL){
// 선택된 폴더 경로얻음
SHGetPathFromIDList(pidlBrowse, pszPathname);
}
}
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { switch (uMsg) { // 폴더선택 다이얼로그의 초기화가 끝난 경우 case BFFM_INITIALIZED: SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData); break; } return 0; } void CSetupDlg::OnBnClickedButtonSetPath() { // TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다. ITEMIDLIST *pidlBrowse; WCHAR pszPathname[MAX_PATH]; BROWSEINFO BrInfo; BrInfo.hwndOwner = GetSafeHwnd(); BrInfo.pidlRoot = NULL; memset(&BrInfo, 0x00, sizeof(BrInfo)); BrInfo.pszDisplayName = pszPathname; BrInfo.lpszTitle = _T("Select folder"); BrInfo.ulFlags = BIF_RETURNONLYFSDIRS; // 이벤트에 대한 사용자정의 함수 BrInfo.lpfn = BrowseCallbackProc; // 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다. CString strInitPath = SMI.GetSaveFolder().c_str(); BrInfo.lParam = (LPARAM)strInitPath.GetBuffer(); pidlBrowse = ::SHBrowseForFolder(&BrInfo); if(pidlBrowse != NULL){ // 선택된 폴더 경로얻음 SHGetPathFromIDList(pidlBrowse, pszPathname); } }
int CALLBACK BrowseCallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData)
{
    switch (uMsg) {
        // 폴더선택 다이얼로그의 초기화가 끝난 경우
    case BFFM_INITIALIZED:
        SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
        break;
    }
    return 0;
}

void CSetupDlg::OnBnClickedButtonSetPath()
{
	// TODO: 여기에 컨트롤 알림 처리기 코드를 추가합니다.
	ITEMIDLIST  *pidlBrowse;
	WCHAR       pszPathname[MAX_PATH];
 
    BROWSEINFO  BrInfo;
    BrInfo.hwndOwner = GetSafeHwnd();
    BrInfo.pidlRoot = NULL;
 
    memset(&BrInfo, 0x00, sizeof(BrInfo));
    BrInfo.pszDisplayName = pszPathname;
    BrInfo.lpszTitle = _T("Select folder");
    BrInfo.ulFlags = BIF_RETURNONLYFSDIRS;
 
    // 이벤트에 대한 사용자정의 함수
    BrInfo.lpfn = BrowseCallbackProc;
    // 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다.
	CString strInitPath = SMI.GetSaveFolder().c_str();
    BrInfo.lParam = (LPARAM)strInitPath.GetBuffer();
 
    pidlBrowse = ::SHBrowseForFolder(&BrInfo);
    if(pidlBrowse != NULL){
        // 선택된 폴더 경로얻음
        SHGetPathFromIDList(pidlBrowse, pszPathname);
    }
}

Comments

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다