최대 1 분 소요

MFC 폴더 선택

  1. 폴더 선택
	BROWSEINFO BrInfo;
	TCHAR szBuffer[512];                                      // 경로저장 버퍼 

	::ZeroMemory(&BrInfo,sizeof(BROWSEINFO));
	::ZeroMemory(szBuffer, 512); 

	BrInfo.hwndOwner = GetSafeHwnd(); 
	BrInfo.lpszTitle = _T("파일이 저장될 폴더를 선택하세요");
	BrInfo.ulFlags = BIF_NEWDIALOGSTYLE | BIF_EDITBOX | BIF_RETURNONLYFSDIRS;
	LPITEMIDLIST pItemIdList = ::SHBrowseForFolder(&BrInfo);
	::SHGetPathFromIDList(pItemIdList, szBuffer);				// 파일경로 읽어오기

	CString str;
	str.Format(_T("%s"),szBuffer);
	AfxMessageBox(str)
  1. 파일 선택
	CString str = _T("All files(*.*)|*.*|"); // 모든 파일 표시
	// _T("Excel 파일 (*.xls, *.xlsx) |*.xls; *.xlsx|"); 와 같이 확장자를 제한하여 표시할 수 있음
	CFileDialog dlg(TRUE, _T("*.dat"), NULL, OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, str, this);

	if (dlg.DoModal() == IDOK)
	{
		CString strPathName = dlg.GetPathName();
                // 파일 경로를 가져와 사용할 경우, Edit Control에 값 저장
		SetDlgItemText(IDC_EDIT1, strPathName);  
	}

파일 경로 선택하여 표시하는것으로 파일 경로 위치 선택하는데 유용하게 사용하는 함수이다.

  1. 기본 폴더 경로 추가하기 ```cpp
    • 다음의 콜백 function을 정의 한 다음

static int CALLBACK BrowseForFolder_CallbackProc(HWND hwnd, UINT uMsg, LPARAM lParam, LPARAM lpData) { if(uMsg == BFFM_INITIALIZED) SendMessage(hwnd, BFFM_SETSELECTION, (WPARAM)TRUE, (LPARAM)lpData); return 0; }

CString strTempDirectory; char buffer[MAX_PATH]; LPITEMIDLIST pDirList; BROWSEINFO browseInfo; browseInfo.hwndOwner = NULL; browseInfo.pidlRoot = NULL; browseInfo.lpszTitle = “Select Root directory”; browseInfo.pszDisplayName = buffer; browseInfo.ulFlags = BIF_RETURNONLYFSDIRS; browseInfo.lpfn = BrowseForFolder_CallbackProc; // 초기로 지정할 디렉토리 경로가 저장된 변수 browseInfo.lParam = (LPARAM)(LPCSTR)strTempDirectory; ```

출처

  1. https://programbird.tistory.com/35
  2. https://psmkr0225.tistory.com/192
  3. https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=holmes5&logNo=90031587171 기본 경로 추

댓글남기기