MFC 파일과 폴더 선택 다이얼로그 띄우기
Develop2018. 11. 1. 10:52
MFC에서 파일과 폴더를 선택할 수 있는 다이얼로그를 띄우는 소스코드 입니다. 파일 선택 다이얼로그는 싱글 선택과 멀티 선택으로 구분되며, 폴더 선택 다이얼로그는 두 가지 스타일로 구분됩니다. 자주 사용되기에 정리해둘 목적으로 기본형 코드로 작성합니다.
파일 선택 다이얼로그 - 싱글 선택
싱글 파일 선택 다이얼로그 띄우기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | TCHAR szFilter[] = _T("Image(*.png, *.gif, *.jpg)|*.png;*.gif;*.jpg|All Files(*.*)|*.*||"); CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter); if (IDOK == dlg.DoModal()) { // // 선택 파일정보 얻기 // strPathName "C:/Images/Picture1.jpg" // strFileName "Picture1.jpg" // strFolderPath "C:/Images" CString strPathName = dlg.GetPathName(); CString strFileName = dlg.GetFileName(); CString strFolderPath = dlg.GetFolderPath(); } | cs |
파일 선택 다이얼로그 - 멀티 선택
멀티 파일 선택 다이얼로그 띄우기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | TCHAR szFilter[] = _T("Image(*.png, *.gif, *.jpg)|*.png;*.gif;*.jpg|All Files(*.*)|*.*||"); CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT, szFilter); if (IDOK == dlg.DoModal()) { // // 선택 파일정보 얻기 POSITION pos = dlg.GetStartPosition(); while (pos != NULL) { CString strPathName = dlg.GetNextPathName(pos); // 경로(strPathName)를 이용하여 이후작업 추가 } } | cs |
폴더 선택 다이얼로그 - 파일 선택 유사 스타일
폴더 선택 다이얼로그 띄우기 (파일 선택 다이얼로그와 같은 선택 방식)
1 2 3 4 5 6 7 8 9 10 11 12 | // 초기 선택 폴더 CString strInitPath = _T("C:\\"); // 폴더 선택 다이얼로그 CFolderPickerDialog Picker(strInitPath, OFN_FILEMUSTEXIST, NULL, 0); if (Picker.DoModal() == IDOK) { // 선택된 폴더 경로얻음 CString strFolderPath = Picker.GetPathName(); // 경로(strFolderPath)를 이용하여 이후작업 추가 } | cs |
폴더 선택 다이얼로그 - 폴더 트리 스타일
폴더 선택 다이얼로그 띄우기
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | // // 폴더선택 다이얼로그를 구현하기 위해 사용되는 사용자정의 Callback 함수 // 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 SelectFolder() { 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; // 사용자정의 함수에 넘겨질 인자로 사용자가 설정하고자 하는 경로를 설정한다. // 예를들어 초기폴더경로를 C드라이브로 설정하는 경우 CString strInitPath = _T("C:\\"); BrInfo.lParam = (LPARAM)strInitPath.GetBuffer(); pidlBrowse = ::SHBrowseForFolder(&BrInfo); if(pidlBrowse != NULL) { // 선택된 폴더 경로얻음 SHGetPathFromIDList(pidlBrowse, pszPathname); // 경로(pszPathname)를 이용하여 이후작업 추가 } } | cs |
'Develop' 카테고리의 다른 글
MFC 숫자 3자리 단위마다 콤마 넣기 (1) | 2018.11.28 |
---|---|
[NODE.JS] SMS API를 적용해보자 - COOLSMS (0) | 2018.11.08 |
MFC 특정 윈도우 화면 캡쳐/미러링 기능 (1) | 2018.11.07 |
미리컴파일된 OpenSSL (0) | 2018.11.04 |
안드로이드 스튜디오 녹스 연동 (1) | 2018.10.30 |
댓글 영역