본문 바로가기

공부/MFC

대화상자 로 경로 찾기

프로그램 내에서 사용되는 코드들을 적어두는 포스팅.

일단은 외형을 짜는 방법부터 시작하였다.
 

대화상자[ 다이얼로그 ] 를 활용한 경로 알아내기 와 얻은 경로를
에디트 컨트롤 에 집어넣는 법.




도구상자들을 통하여 위와 같이 만들고

우측 파일 찾기 를 더블클릭하거나  이벤트 처리기 추가 를 통해 클릭 관련 처리를 만들어준다.


여기서 쓰인 중요 코드는  

CFileDialog Dlg(TRUE, _T("DAT"), NULL,
OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST,
_T("DAT Files(*.dat)|*.dat|All Files(*.*)|*.*||"),this);

파일 경로 를 알아내는 파일 대화 상자 코드이다.


원형은 다음과 같다

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



책에서는 CWnd 이후는 안적혀있다.

차례대로 열기 인지 저장 인지 명시하는 플래그  bOpenFileDialog

저장 모드일 시 입력받은 파일명에 덧붙일 확장명을 적어주는   lpszDefExt [열기 이므로 본 코드에선 NULL이다.]

 경로 입력 필드에 출력할 기본 값  lpszFileName 

그리고  
dwFlags  에는 속성이 들어가며  (OFN_FILEMUSTEXIST | OFN_PATHMUSTEXIST) 이 두 속성을 정하면

열려는 파일과 경로가 분명하게 있음을 의미함. 여기에 OFN_ALLOWMULTISELECT를 입력하여 추가하면 여러 파일을 선택할 수 있다.

원형에 쓰인  OFN_HIDEREADONLY  은 숨긴 파일은 보이지 말라는 속성이고  OFN_OVERWRITEPROMPT 은 저장모드에서 이미 같은 이름의 파일이 있을 때 경고창을 띄우라는 속성이다.

그 다음으로 중요한  속성은 
lpszFilter  가 있다.

이는 흔히 가장 첫번째로 해당 프로그램에서 사용할 파일들의 확장자를 정하여 그것들만 보이게 필터링 할 때 사용된다.

본문에 쓰인 것 처럼 띄어쓰기를 하지 않아야 잘 작동하므로 보기 편하라고 띄어쓰기를 하면 작동이 되지 않으니 주의해야한다. 

속성의 마지막에는 ||를 붙여서 끝을 표시해야 한다.
 
pParentWnd 는 새로 만들 파일 대화 상자의 부모 윈도우의 주소이다.



조건문인   if(Dlg.DoModal() == IDOK) 
를 통하여 정상적으로 파일을 입력시킨 경우에 해당 코드를 실행하게 한다. 


CString strValue;                               // 입력할 변수선언
strValue = Dlg.GetPathName();           // 입력할 내용
SetDlgItemText(IDC_LOG,strValue);    //저장.

GetPathName 을 통하여 대화상자에서 얻은 파일의 경로명을 스트링 변수에 집어넣고

그 값을 왼측의 에디트 컨트롤 에 집어넣는다. 


코드 파일 업로드.




ps. 주석처리 된 부분은 책에 있는 내용으로 주석을 해제하면 대화 상자에서 입력을 마치는 즉시 파일명 경로명 파일의 확장자 가 메시지로 출력된다. 


**공부에 도움이 되었다면 손가락 버튼을 클릭해주심 좋겠습니다.**