[MFC] MDI에서 파일 저장할 때 파일 확장자 필터 바꾸기


CDocManager클래스를 상속받습니다.
그리고 DoPromptFileName 함수를 재정의 합니다.

class CMyDocManager : public CDocManager
{
public:
virtual BOOL DoPromptFileName( CString& fileName
, UINT nIDSTitle
, DWORD lFlags
, BOOL bOpenFileDialog
, CDocTemplate* pTemplate );
};

BOOL CMyDocManager::DoPromptFileName(CString& fileName, UINT nIDSTitle,DWORD lFlags,
BOOL bOpenFileDialog, CDocTemplate* pTemplate)
{
CFileDialog dlgFile(bOpenFileDialog,"기본확장자");

CString title;
VERIFY(title.LoadString(nIDSTitle));

dlgFile.m_ofn.Flags |= lFlags;

dlgFile.m_ofn.lpstrFilter = "텍스트파일(*.txt)\0*.txt\0모든파일(*.*)\0*.*\0";
dlgFile.m_ofn.lpstrTitle = title;
dlgFile.m_ofn.lpstrFile = fileName.GetBuffer(_MAX_PATH);

INT_PTR nResult = dlgFile.DoModal();
fileName.ReleaseBuffer();
return nResult == IDOK;
};

그리고 CwinApp를 상속하는 클래스에서 InitInstance함수에서 다음을 추가합니다
m_pDocManager = new CmyaniDocManager; =>요걸 도큐먼트템플릿이 할당되기전에 추가해줍니다.

예) App -> InitInstance()

m_pDocManager = new CMyDocManager;
//요기에 추가하면됩니다.
// 응용 프로그램의 문서 템플릿을 등록합니다. 문서 템플릿은
// 문서, 프레임 창 및 뷰 사이의 연결 역할을 합니다.

CSingleDocTemplate* pDocTemplate;

pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyDoc),
RUNTIME_CLASS(CMainFrame), // 주 SDI 프레임 창입니다.
RUNTIME_CLASS(CMyView));

if (!pDocTemplate)
return FALSE;

AddDocTemplate(pDocTemplate);


이렇게 해주면 이제 파일메뉴의 열기/저장을 클릭하면 자신이 원하는
필터를가진 파일열기다이알로그박스가 뜹니다~

출처 : 데브피아 최우열(choi98772)님의 답변글


Powered by Tattertools