만약 MFC에서 버튼을 눌러서 윈도우 탐색기를 열고싶다면, 어떻게 해야할까요 ?
한번 알아봅시다.
Button 생성
[리소스뷰] -> [Dialog] -> [도구상자]-> [Button] 클릭하여 버튼 생성합니다.
Button 이벤트 처리기 추가
[우클릭] -> [이벤트 처리기 추가(A)]를 클릭하여 버튼을 클릭했을 때 이벤트가 일어날 수 있도록 함수를 생성합니다. .
이벤트 처리기를 추가할 때 클래스 목록은 본인 main dialog 클래스에,
메시지 유형은 BN_CLICKED로,
함수명은 본인이 원하는 함수명으로 변경해주세요.
Button 이벤트 처리기에 파일탐색기 열기
폴더와 파일 탐색을 지원하는 CFileDialog를 사용하여 파일탐색기를 열 수 있습니다.
앞서 만든 이벤트 처리기 함수 내에 아래와 같이 작성합니다.
void CtestDlg::OnBnClickedButtonFileExplorer()
{
// 파일/폴더 선택 다이얼로그 (파일 및 폴더를 포함)
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
_T("All Files|*.*||"), NULL, 0);
if (dlg.DoModal() == IDOK)
{
UpdateData(FALSE);
}
}
이렇게 간단하게 작성하고 디버깅을 진행하면 바로 버튼을 눌러 파일탐색기를 열 수 있습니다.
파일탐색기 초기 폴더 설정하기
그럼 파일탐색기의 초기 폴더를 설정하는 방법은 뭘까요 ?
아래 strInitPath을 사용해서 초기 폴더를 설정할 수 있습니다.
void CtestDlg::OnBnClickedButtonFileExplorer()
{
// 초기 선택 폴더
CString strInitPath = _T("E:\\test_fold");
// 파일/폴더 선택 다이얼로그 (파일 및 폴더를 포함)
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
_T("All Files|*.*||"), NULL, 0);
// 초기 디렉터리 설정
dlg.m_ofn.lpstrInitialDir = strInitPath;
if (dlg.DoModal() == IDOK)
{
UpdateData(FALSE);
}
}
폴더 내에 있는 특정 포맷만 불러오기
그럼 만약, 해당 폴더 내에 있는 그림파일 ( *.jpg, *.jpeg, *.png, *.bmp ...) 만 표시하고 싶으면 어떻게 하면 될까요 ??
그럼 기존의 All Files를 원하는 포맷으로 설정해 주면 됩니다.
방법은 아래와 같습니다.
void CtestDlg::OnBnClickedButtonFileExplorer()
{
// 초기 선택 폴더
CString strInitPath = _T("E:\\test_fold");
// 파일/폴더 선택 다이얼로그 (파일 및 폴더를 포함)
CFileDialog dlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
_T("Image Files (*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp||"), NULL, 0);
// 초기 디렉터리 설정
dlg.m_ofn.lpstrInitialDir = strInitPath;
if (dlg.DoModal() == IDOK)
{
UpdateData(FALSE);
}
}
폴더 내에 있는 파일명 불러오기
선택한 파일들의 파일명을 불러오는 방법은 어떻게 하면 될까요 ?
DoModel을 통해서 모달형 파일탐색기에 IDOK가 호출되면 파일명을 불러올 수 있습니다.
자세한 방법은 아래와 같습니다.
// cout으로 출력해서 확인해보기 위함.
// CString to std::string
std::string CtestDlg::CString2string(CString cstr)
{
std::string str = std::string(CT2CA(cstr));
return str;
}
void CtestDlg::OnBnClickedButtonFileExplorer()
{
// 초기 선택 경로
CString strInitPath = _T("E:\\test_fold");
// 파일 선택 다이얼로그 설정
CFileDialog fileDlg(TRUE, NULL, NULL, OFN_FILEMUSTEXIST | OFN_ALLOWMULTISELECT,
_T("Image Files (*.jpg;*.jpeg;*.png;*.bmp)|*.jpg;*.jpeg;*.png;*.bmp||"), NULL, 0);
// 초기 경로 설정
fileDlg.m_ofn.lpstrInitialDir = strInitPath;
if (fileDlg.DoModal() == IDOK)
{
// 선택된 파일 경로를 가져옴
POSITION pos = fileDlg.GetStartPosition();
while (pos)
{
CString filePath = fileDlg.GetNextPathName(pos);
CString fileName = filePath.Mid(filePath.ReverseFind(_T('\\')) + 1);
cout << "===================================" << endl;
cout << CString2string(filePath) << endl;
cout << CString2string(fileName) << endl;
}
UpdateData(FALSE);
}
}
위 사진에서 보시면 filePath와 fileName이 정상적으로 출력되는 것을 확인할 수 있습니다.
'Programming > MFC' 카테고리의 다른 글
[MFC] mfc 버튼에 배경색 없는 아이콘 넣기 (vs 2019) (0) | 2024.12.28 |
---|---|
[MFC] 엑셀 파일 읽기 (vs2019) (0) | 2024.08.06 |
[MFC] radio 버튼 배경색 및 텍스트 색상 변경하기 (vs 2019) (0) | 2024.06.04 |
[MFC] mfc 버튼 배경색 및 텍스트 색상 변경하기 (vs 2019) (0) | 2024.04.02 |