728x90
반응형
Frame이 있는 프로젝트를 실행할 때, 기본적으로 제공하는 ID_FILE_OPEN의 경우, 이벤트를 실행하면 파일 다이얼로그가 열리고 해당 경로는 Document의 OpenDocumentFile를 호출하게 된다. 이때 읽을 파일의 확장자나 기능으로 추가하기 위해서는 재정의를 할 필요가 있다.
BEGIN_MESSAGE_MAP(CTaskViewApp, CWinAppEx)
ON_COMMAND(ID_APP_ABOUT, &CTaskViewApp::OnAppAbout)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen)
END_MESSAGE_MAP()
기본적으로 위와 같이 만들어져 있다. 이때 App 클래스에 이벤트를 추가하면,
BEGIN_MESSAGE_MAP(CTaskViewApp, CWinAppEx)
ON_COMMAND(ID_APP_ABOUT, &CTaskViewApp::OnAppAbout)
// Standard file based document commands
ON_COMMAND(ID_FILE_NEW, &CWinAppEx::OnFileNew)
//ON_COMMAND(ID_FILE_OPEN, &CWinAppEx::OnFileOpen) // 주석처리해야함
ON_COMMAND(ID_FILE_OPEN, &CTaskViewApp::OnFileOpen)
END_MESSAGE_MAP()
ON_COMMAND(ID_FILE_OPEN, &CTaskViewApp::OnFileOpen) 이 추가되는데, 해당 함수는 동작하지 않는다. 그렇기 때문에 CWinAppEx::OnFileOpen 부분을 주석 처리해줘야 한다.
그리고 새롭게 만들어진 함수에 재정의 하면 된다.
void CTaskViewApp::OnFileOpen()
{
// 파일 형식 콤보박스에 등록할 필터를 정의한다. (*.*, *.cpp, *.txt)
wchar_t filter[] = L"All Files (*.*)|*.*|XML Files (*.xml)|*.xml||";
// TRUE -> 열기대화상자, "xml" -> 사용자가 확장자 없이 파일명만 입력했을때 자동으로 추가될 확장자명이다.
// "*.xml" 파일이름 에디트에 출력될 기본 문자열이다.
CFileDialog fileDlg(TRUE, L"xml", L"*.xml", OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT | OFN_NOCHANGEDIR, filter, NULL);
// 파일 형식 콤보박스에 나열된 필터들 중에서 2번째 항목(*.xml)을 선택한다.
fileDlg.m_ofn.nFilterIndex = 2;
if (fileDlg.DoModal() == IDOK) {
// 선택된 파일의 경로명을 이용하여 도큐먼트 정보를 재구성한다.
OpenDocumentFile(fileDlg.GetPathName());
}
}
728x90
반응형
'Program Language > API | MFC' 카테고리의 다른 글
[MFC] 따라하기 06. 순차적으로 원 그리기 (0) | 2022.03.09 |
---|---|
[MFC] TreeCtrl Node 모두 확장하기 (2) | 2021.11.23 |
[MFC] App 혹은 Dll에서 콘솔 사용하기 (4) | 2021.09.27 |
[MFC] 시스템 메뉴 삭제 (0) | 2021.09.27 |
[MFC] Frame 타이틀 고정하기 (0) | 2021.09.15 |