SDI to MDI
1. CChildWnd를 CMDIChildWnd를 Base Class로 하여 새로운 MFC클래스를 생성한다.
2. MainFrm.cpp, MainFrm.h 에서 CFrameWnd를 CMDIFrameWnd로 바꾼다.
3. InitInstance()에서 CSingleDocTemplate를 CMultiDocTemplate로 바꾼다.
그리고 전달인자 중 CMainFrame을 CChildFrame으로 바꾼다.
4. InitInstance()에서 적절한 위치에 다음 부분을 추가한다.
CMainFrame* pMainFrame = new CMainFrame;
if (!pMainFrame || !pMainFrame->LoadFrame(IDR_MAINFRAME))
return FALSE;
m_pMainWnd = pMainFrame;
5. CMainFrm의 생성자를 protected에서 public으로 바꾼다.
SDI : 동시에 하나의 Document만 편집할 수 있는 응용프로그램
MDI : 동시에 여러 개의 Document를 편집. 새로운 문서가 열릴 때마다 Document객체 생성.
CMainFrame : 객체 수는 오직 1개. Menu와 컨트롤 바 포함. CApp::InitInstance함수에서 생성.
CChildFrame : child window가 만들어 질 때마다 framework에 의해 생성. View를 포함한다.
Document Template
CMultiDocTemplate::CMultiDocTemplate(리소스아이디, Document, ChildFrame, View);
CWinApp::AddDocTemplate
리소스 ID : 하나의상의 Document가 열려 있을 경우의 resource(IDR_????TYPE)
각 타이틀바, 메뉴, 아이콘 등이 Document Template에 대한 리소스 ID를 가진다.
CWinApp:OnFileNew
- document 객체 생성
- main frame의 ID를 IDR_???TYPE으로 변경, 차일드 프레임 윈도우 생성
- CDocument::OnNewDocument, CView::OnInitialUpdate, CChildFrame::ActiveFrame호출
virtual BOOL CDocument::OnNewDocument();
참고주소 : http://msdn.microsoft.com/ko-kr/library/ewt90sw3(VS.80).aspx
File->New에 명령으로 인한 프레임 워크에 의해 호출.
SDI일 경우 존재하는 Document를 다시 초기화한다.
MDI일 경우 프레임워크는 document를 초기화하기 위해 이 함수를 호출하고 새로운 document를 생성한다.
이 함수에서 프로그래머가 원하는 초기화 코드를 놓아야 한다.
리턴 : Document가 성공적으로 초기화되면 TRUE, 아니면 FALSE
virtual void CView::OnInitialUpdate( );
참고주소 : http://msdn.microsoft.com/ko-kr/library/xc7fw3a0(VS.80).aspx
document에 처음으로 뷰가 부착된 후 뷰가 처음 보이기 전에 프레임 워크에 의해 호출.
document에 관한 정보를 요구하는 한 번에 초기화를 수행한다.
virtual CFrameWnd* CFrameWnd::GetActiveFrame( );
참고주소 : http://msdn.microsoft.com/ko-kr/library/bk1bcdy9(VS.80).aspx
MDI 프레임 윈도우의 활성화된 MDI 차일드 윈도우의 포인터를 얻기 위해 사용한다.
리턴 : 활성화된 MDI 차일드 윈도우의 포인터. 활성화된 윈도우가 없거나 SDI면 묵시적으로 this 포인터가 리턴될 것이다.
하나의 Document에 새로운 View 추가하기
- 창(Window)/새창(New Window) 메뉴 선택시
- 차일드 프레임과 뷰 객체 생성
- CView::OnInitialUpdate, CFrameWnd::ActivateFrame호출
virtual void CView::OnInitialUpdate( );
참고주소 : http://msdn.microsoft.com/ko-kr/library/xc7fw3a0.aspx
뷰가 처음으로 표시되기 전에 document가 뷰에 붙은 후에 프레임워크에 의해 호출된다.
document에 관한 정보를 요구하는 한 번의 초기화를 수행한다.
virtual void CFrameWnd::ActivateFrame(int nCmdShow = -1);
참고주소 : http://msdn.microsoft.com/ko-kr/library/6wywwt36(VS.80).aspx
프레임 윈도우를 활성화하고 복구해서 사용자에게 볼 수 있고 이용가능하게 한다.
nCmdShow : CWnd::ShowWindow에 전달할 파라미터를 지정한다. 기본적으로 프레임은 보이고 정확하게 복구된다.
다중 Document Template
- GetFirstTemplatePosition, GetNextDocTemplate 함수를 이용하여 각 템플릿을 얻을 수 있다.
- File/ New 메뉴 실행시 각 Document type이 list box 내에 표시되어 선택할 수 있다.
UpdateAllViews();
'컴퓨터 공부 > MFC 프로그래밍' 카테고리의 다른 글
[5월 26일 1교시] MFC Socket + ODBC1 (0) | 2009.05.26 |
---|---|
[5월 25일 3교시] Split Window (0) | 2009.05.25 |
[5월 25일 1교시] Document 읽고 쓰기 2 (0) | 2009.05.25 |
[5월 22일 3교시] Document 읽고 쓰기 1 (0) | 2009.05.22 |
[5월 22일 1교시] MFC Collection Class (0) | 2009.05.22 |