MFC 파일선택 대화상자


한개의 파일만 선택할 경우



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();


}


 


 


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


 


dwFlagOFN_ALLOWMULTISELECT 설정한다.


        선택된 여러 파일 리스트가 저장될 버퍼가 제공되야 한다.


        만일 기본 버퍼 이상의 파일을 선택해 확인 버튼을 누른다면,


        DoModal을 실행시켰을 때, IDCANCEL이 리턴되고, 파일 리스트가 넘어오지 않을 것이다.


 


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


dlg.m_ofn.lpstrInitialDir = _T(“D:/”); // 오픈할때 초기 경로 지정
// 여기서 버퍼 크기 늘려줘야 함.


char    strFile[4096] = { 0, };               CString fileName;
dlg.m_ofn.lpstrFile = strFile;                 dlg.m_ofn.lpstrFile = fileName.GetBuffer( 4096 );
dlg.m_ofn.nMaxFile = sizeof(strFile);      dlg.m_ofn.nMaxFile = 4096


if (IDOK == dlg.DoModal()) {
   for (POSITION pos=dlg.GetStartPosition(); pos != NULL;)
       CString
strPathName =
dlg.GetNextPathName(pos);
}

파일 선택 필터

static TCHAR BASED_CODE szFilter[] = 
_T(“Chart Files (*.xlc)|*.xlc|”) _T(“Worksheet Files (*.xls)|*.xls|Data Files (*.xlc;*.xls)|”)
_T(“*.xlc; *.xls|All Files (*.*)|*.*||”);


예제

void CMyClass::OnFileOpen() 
{
// szFilters is a text string that includes two file name filters:
// “*.my” for “MyType Files” and “*.*’ for “All Files.”
TCHAR szFilters[]= _T(“MyType Files (*.my)|*.my|All Files (*.*)|*.*||”);

// Create an Open dialog; the default file name extension is “.my”.
CFileDialog fileDlg(TRUE, _T(“my”), _T(“*.my”),
OFN_FILEMUSTEXIST | OFN_HIDEREADONLY, szFilters);

// Display the file dialog. When user clicks OK,

fileDlg.DoModal()

// returns IDOK.
if (fileDlg.DoModal() == IDOK)
{
CString pathName = fileDlg.GetPathName();

// Implement opening and reading file in here.
// Change the window’s title to the opened file’s title.

CString fileName = fileDlg.GetFileTitle();
SetWindowText(fileName);
}
}

============================================================================



CFileDialog dlgFile(TRUE);


CString fileName;
const int c_cMaxFiles = 100;
const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;


dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);
dlgFile.GetOFN().nMaxFile = c_cMaxFiles;



dlgFile.DoModal();


fileName.ReleaseBuffer();

============================================================================

CFileDialog::CFileDialog




explicit CFileDialog( BOOL bOpenFileDialog,
LPCTSTR lpszDefExt = NULL,
LPCTSTR lpszFileName = NULL,
DWORD dwFlags = OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT,
LPCTSTR lpszFilter = NULL,
CWnd* pParentWnd = NULL,
DWORD dwSize = 0,
BOOL bVistaStyle = TRUE );


BOOL bOpenFileDialog
       생성하는 다이얼로그 박스 타입을 지정해 주는 매개변수
       TRUE => 파일열기 다이얼로그 박스
       FALSE => 파일 저장 다이얼로그 박스

LPCTSTR lpszDefExt
      기본 파일 확장자명(저장할 경우 사용)
       만약 유저가 파일이름 상자 안에 확장자를 포함하지 않는 경우
       lpszDefExt의 파일 확장자명을 자동으로 지정 함
       NULL => 확장자명을 추가하지 않음

lpszFileName
       시작할 때 파일이름 상자에 나타낼 이름 지정
        NULL => 시작할 때 파일이름을 나타내지 않음



dwFlags
       하나이상의 플래그를 사용하여 사용자가 원하는 다이얼로그 박스로 조합

        많이 사용되는 플래그
        OFN_ALLOWMULTISELECT        한번에 여러개의 파일들을 선택 가능하게 함
        OFN_CREATEPROMPT              존재하지 않는 파일명을 입력했을 경우 새로 생성하겠냐는 대화상자 표시
        OFN_EXPLOPER                       열기나 저장하기를 윈도우 탐색기 스타일로 출력
        OFN_FILEMUSTEXIST               기존에 존재하는 파일 이름만 입력할 수 있도록 함
        OFN_HIDEREADONLY                읽기전용 파일은 출력하지 않음
        OFN_LONGNAMES                   긴 파일 이름을 사용할 수 있도록 함
        OFN_OVERWRITEPROMPT        저장할려고 하는 파일명이 존재할 경우 덮어쓰겠냐는 대화 상자 표시
        OFN_PATHMUSTEXIST             오직 유효한 경로나 파일명만을 입력(아님 경고 메세지 출력)

        추가 플래그 참조 :
http://msdn.microsoft.com/ko-kr/library/ms646839(en-us,VS.85).aspx


lpszFilter
    사용할 파일들이 걸러지도록 파일명들을 연속으로 나열 함

pParentWnd
    부모나 소유자 윈도우의 파일 다이얼로그 박스의 포인터

dwSize
    OPENFILENAME 구조체의 크기


답글 남기기

이메일 주소는 공개되지 않습니다.