Program Language/API | MFC

[MFC] MDI에서 새창 열기

야곰야곰+책벌레 2021. 5. 20. 17:20
728x90
반응형
	CDocTemplate* pTemplateDoc = theApp.m_pDocTemplate; // App에서 멤버 포인터를 가져온다.
	pTemplateDoc->OpenDocumentFile(NULL); // 새창에 연다.​
	m_pDocTemplate = new CMultiDocTemplate(IDR_DBAppTYPE,
		RUNTIME_CLASS(CDBAppDoc),
		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
		RUNTIME_CLASS(CDBAppListView));
	if (!m_pDocTemplate)
		return FALSE;
	AddDocTemplate(m_pDocTemplate);

MDI에서 새창을 여는 것은 App에 선언된 메시지를 이용하는 방법이 가장 간단하다.

CMainFrame에서 아래와 같이 적어주면 된다.

SendMessage(WM_COMMAND, ID_FILE_NEW, NULL);

다른 클래스에서 창을 새롭게 열고 싶다면 아래와 같다.

AfxGetMainWnd()->SendMessage(WM_COMMAND, ID_FILE_NEW, NULL);

다른 방법으로는 App 파일에서 Frame을 처음 만들 때 사용하는 CMultiDocTemplate를 이용할 수 있다.

	m_pDocTemplate = new CMultiDocTemplate(IDR_DBAppTYPE,
		RUNTIME_CLASS(CDBAppDoc),
		RUNTIME_CLASS(CChildFrame), // custom MDI child frame
		RUNTIME_CLASS(CDBAppListView));
	if (!m_pDocTemplate)
		return FALSE;
	AddDocTemplate(m_pDocTemplate);

pDocTemplate를 멤버 변수로 선언하고 App Class가 가지고 있게 한다. 그런 다음 프로그램에서 아래와 같이 호출하면 된다.

	CDocTemplate* pTemplateDoc = theApp.m_pDocTemplate;
	pTemplateDoc->OpenDocumentFile(NULL);

OpenDocumentFile에서 매개변수를 NULL 두면 새창으로 열기이며, Path를 지정하면 해당 파일을 읽어온다. 사실 여러 개의 도큐먼트를 열거나 선택해서 만들 때가 아니라면 메시지를 이용하는 편이 편하다.

728x90
반응형