IT잡다/MFC

MFC(4) MFC SDI 프로그램 기본 구조 1

leeyk2121 2025. 1. 16. 00:34

 

 


F7 눌러서 빌드좀 하기

ctrl+F5 누르면 실행

 

 

이런게 MFC로 만든 예제들이다.

클래스 뷰

클래스가 여러개 있는 것을 확인했다.

CHelloMFCApp 클래스를 먼저 보겠다. 

CHelloMFCApp 

디자인 패턴이 등장하나. MFC는 싱글톤 패턴을 사용한다. 자바의 스프링은 컨테이너가 알아서 해준다. 근데 MFC는 그런거 없다. 모든 책임은 우리에게 있다..

InitInstance가 Main함수의 시작이라고 보면 된다. 

ExitInstance()

 

인스턴스 종료 즉 프로그램 종료시 불려진다. 

호출된다. 뜻이다. 영어 표현으로는 Called by framework이다. 이런 구조이다. 지금은 HelloMFC는 구조를 익히는 것이 아주 중요하다.

이 프레임 워크는 당연히 MFC 프레임 워크이다. 그러면이 프레임워크에 의해서 불리는데 이게 다시 말하면  MFC 프레임 워크가 알아서 부른다. 언제,왜 그때 딸려오는 정보를 가지고 어떤 처리를 하는지 고민해야한다.

그 흐름을 결정하는 것은 프레임워크가 이미 결정을 했다. Called by framework는 두가지 형태가 있다. 

1. 가상함수

가상함수 즉 MFC가 알아서 부른다.

가상함수를 재정의 해주면 알아서 Called by framework에 의해서 불린다.

2. Callback 즉 메시지 처리기 (Handler)

메시지가 뭐가 하나 정해지면 정해진 메시지에 대응해주는 함수 하나가 나오게 되고 이 함수를 처리기라고한다.

다 등록해놓고 쓴다.

 

다시 정리해보자...

윈도우 PC용 어플리케이션을 개발할 때 우리는 앞서 SDI(Single document interface)를 선택했다.

SW는 세놈으로 쪼갠다. 제어체계, GUI, 자료구조 이렇게 크게 3구조로 나눈다. 

윈도우의 SDI로 개발하게 되면 위와 같은 방식으로 3구조로 나뉜다. 

1. CWinAPP Class(제어체계)

2. CFrameWnd+CView (GUI)

3. C Document(자료구조)

우리가 MFC로 프로그래밍 하면 대부분의 코드가 2번에 집중될 가능성이 높다.

근데 이러한 프레임워크를 사용하면 Framework가 흐름을 만드는데 우리가 만든게 아니여서 파악하는게 제일 중요하다.

CWinAPP 자체가 프로그램 그 자체로 생각한다.

Frame하고 View는 GUI 관련된 거다.

Document는 걍..기능이다..

 

다시 되돌아가서

MFC어플리케이션이 시작되면 내부적으로 보면

APxWinMain()이 호출되고 끝나면 프로그램이 끝난다. 이때 이 내부에서 객체를 생성하는데 CWinAPP object를 생성한다. 이놈이 main함수구나라고 생각하면된다.

CWinAPP이르고 있는 흐름은 3가지가 있다. 핵심 함수가 1,2,3이 있다.

1. InitInstance() : 알아서 제일 먼저 불린다.

2. Run() : LOOP가 돌면서 어딘가로 Callback이 된다. 처리기가 왕창 만들어지고 내가 만든 프로그램들이 도는 방식이다.

3. ExitInstance()

이 3흐름이 만들어지면 프로그램의 시작과 끝이 된다. 

이때 Run()이 동작하면 Message Loop가 작동한다. 

(진짜..기존에 하던 프로그랭이란 많이 다르다..순서가 정해져있네;;)

거의 기존의 프레임워크에 내가 추가하는 느낌이다.

언제? 왜? 어디에?? 넣어야 하는거냐가 중요하다. 

 

한 어플케이션 인스턴스에 메시지 큐도 있고 큐에서 퍼올리는 메시지 루프도 있는데 이 어플리케이션의 윈도우가 여러개 있을 수 있다. 여기서 문제는 각 윈도우에 여러 코드를 넣었다고 하자. 이 모든 처리기(윈도우)가 있는데 이 루프로 부터 콜백되는데 WN_Commend가 왔다고 하자. 여러 윈도우중에 어디에 넣어야 하는지 고민해야한다.

이런 메시지들이 윈도우들을 돌아다닌다. 그게 라우팅이다. 와 진짜 복잡하네

메시지도 MFC 프레임 라우팅 순서에 의해 정해진다. 

[출처] : https://www.youtube.com/watch?v=t83eU1Z3Xzg&list=PLXvgR_grOs1CyJDnWeUTqbmKG1VFQM72e&index=5

'IT잡다 > MFC' 카테고리의 다른 글

MFC(3)-HelloWorld Win32 API 버전 코드 분석  (0) 2025.01.14
MFC(2) - Visual Studio Community 2022 설치 & 개발환경  (0) 2025.01.13
MFC(1)  (0) 2025.01.13