본문 바로가기

공부기록

공부기록, 2021-10-21(mfc 구조및순서)

  - MFC 구조및순서
    - App 시작



1. APP 시작 (main)



   이것저것 등록, 메인 프레임 생성



   ProcessShellCommand 함수 내부에서 OnFileNew 메시지 호출(파일 더블클릭시 OnFileOpen 메시지 호출)



2. Document 생성



3. Child Frame 생성



4. PreCreateWindow / Child Frame 실행 - 여러번 실행됨 (3번)



4. View 생성



5. PreCreateWindow / View 실행



6. OnNewDocuments 실행



 



View 생성



1. Child Frame 생성



 



1. View 삭제



2. Child Frame 삭제



- ChildFrame이 남아 있으면 1번으로



3. Document 삭제



 

*CChildFrame::PreCreateWindow 에서 메모리 할당같은거 하면 큰일남



*CMainFrame::PreCreateWindow 도 두번 호출 됨



 

만들어진 view 찾기



ProcessShellCommand(cmdInfo) 뒤에 호출



 for (POSITION p1 = GetFirstDocTemplatePosition(); p1 != NULL;)



 {



  CDocTemplate* pTemp = GetNextDocTemplate(p1);







  for (POSITION p2 = pTemp->GetFirstDocPosition(); p2 != NULL;){



   CDocument* pDoc = pTemp->GetNextDoc(p2);







   for (POSITION p3 = pDoc->GetFirstViewPosition(); p3 != NULL;){



    CView* pView = pDoc->GetNextView(p3);



    //if (pView->IsKindOf(RUNTIME_CLASS(/*찾으려는 view클래스*/))){



    printf("a");



   }



  }



 }





 ① App 클래스의 Instance를 얻는 방법



 CExMDIApp *pApp = (CExMDIApp *)AfxGetApp();



 



 ② MainFrame 클래스의 Instance를 얻는 방법



 CMainFrame *pFrame = (CMainFrame *)AfxGetMainWnd();



 



 ③ ChildFrame 클래스의 Instance를 얻는 방법



 CChildFrame *pChild = (CChildFrame *)pFrame->GetActiveView()



 



 ④ View 클래스의 Instance를 얻는 방법



 CExMDIView *pView = (CExMDIView *)pChild->GetActiveView()



 



 ⑤ Document 클래스의 Instance를 얻는 방법



 CExMDIDoc *pDoc = (CExMDIDoc *)pChild->GetActiveDocument()



 
## 자주 하는 실수
  - 기본기능으로 때우려고함
## 큐
  - 어차피 헷갈리니 자주보고쓰자
## 내가 모르는 것
  - MFC 구조및순서