기술 MFC 파일,폴더 경로 선택
MFC 폴더 선택
- 폴더 선택
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)
- 파일 선택
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);
}
파일 경로 선택하여 표시하는것으로 파일 경로 위치 선택하는데 유용하게 사용하는 함수이다.
- 기본 폴더 경로 추가하기
```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; ```
출처
- https://programbird.tistory.com/35
- https://psmkr0225.tistory.com/192
- https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=holmes5&logNo=90031587171 기본 경로 추
댓글남기기