본문 바로가기

Application Dev./C++/MFC

CFileDialog의 모든것

CFileDialog 정의

CFileDialog(BOOL bOpenFileDialog, LPCTSTR lpszDefExt = NULL, LPCTSTR lpszFileName = NULL,
        DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWITEPROMPT,
        OPCTSTR lpszFilter = NULL, CWnd *pParentWnd = NULL)

bOpenFileDialog

TRUE:열기, FALSE: 다른 이름으로저장

lpszDefExt

기본 확장자.

lpszFileName     

대화상자가 처음 출력되었을 때 "파일 이름" Edit 컨트롤에 출력될 파일명 지정

dwFlags

OFN_EXPLORER  

윈도우 탐색기 스타일로 출력

OFN_ARROWMULTISELECT

파일을 한번에 여러개 선택 가능

OFN_CREATEPROMPT 

존재하지 않는 파일명을 입력했을 경우 새로 생성하겠냐는 메시지 박스 출력

OFN_FILEMUSTEXIST   

존재하지 않는 파일명을 입력할 수 없도록 함

OFN_HIDEREADONLY

읽기전용 파일은 출력하지 않음

OFN_LONGNAMES

긴 파일 이름 포맷 지원

OFN_OVERWRITEPROMPT 

존재하는 파일명을 입력했을 경우 덮어쓰겠냐는 메시지 박스 출력

OFN_PATHMUSTEXIST     

이미 존재하는 디렉터리명만을 입력

lpszFilter

대화상자에 출력될 파일들을 확장자에 의해서 걸러지도록 하기 위한 필터 지정

pParentWnd

대화상자의 부모 윈도우 지정

CFileDialog 클래스의 멤버 함수

CString GetPathName

선택된 파일의 절대경로

CString GetFileName

선택된 파일의 이름과 확장자

CString GetFileExt

선택된 파일의 확장자

String GetFileTitle

선택된 파일의 파일명

BOOL GetReadOnlyPref 

읽기전용 여부

POSITION GetStartPosition

다중 선택의 경우 사용

CString GetNextPathName


CFileDialog 클래스의 인스턴스를 선언하고 DoModal 함수 호출


- 한개의 파일만 선택할 경우

char szFilter[] = "Image (*.BMP, *.GIF, *.JPG) | *.BMP;*.GIF;*.JPG | All Files(*.*)|*.*||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_HIDEREADONLY, szFilter);
if(IDOK == dlg.DoModal())
{
       
CString strPathName = dlg.GetPathName();
}



-
여러개의 파일을 복수 선택할 경우

char szFilter[] = "All Files(*.*) | *.* ||";
CFileDialog dlg(TRUE, NULL, NULL, OFN_ALLOWMULTISELECT, szFiilter);

if(IDOK == dlg.DoModal())
     
for(POSITION pos=dlg.GetStartPosition(); pos != NULL;)
              m_ctrlListBox.AddString(dlg.GetNextPathName(pos));

※ 파일 복수 선택시 유의할 점
char buffer[4096] = {0}; //버퍼
dlg.m_ofn.lpstrFile = buffer; //버퍼 포인터
dlg.m_ofn.nMaxFile = 4096; //버퍼 크기

이 부분을 넣어주지 않으면 파일 갯수에 제한이 생겨버립니다.