2.4 MFC 애플리케이션 아키텍처
1) CObject 클래스
- MFC의 최상위 기본 클래스로써 메모리에 클래스를 설정하는 기능을 가진 클래스
- CObject 클래스는 클래스 루트로써만 작용하는 것이 아니라, 다음과 같은 서비스와 기능을 제공함
- 직렬화 (Serialization)의 지원: 현재 클래스의 객체가 디스크에 저장할 수 있도록 지원하고, 저장 여부를 확인할 수 있음
- Run - Time 클래스 정보: 현재 클래스의 상태를 확인하고 오류를 정리할 수 있음
- 객체의 검사 출력: 클래스의 객체가 유효한지 검사
- 컬렉션 클래스에 대한 호환성 제공: 컬렉션 클래스에 저장 가능한 객체는 CObject 클래스를 상속받은 클래스만이 가능하므로 사용자 클래스를 제작해 컬렉션 클래스에 저장하고자 한다면 항상 CObject를 상속받아야 함
2) CCmdTarget 클래스
- MFC의 메시지 맵 아키텍처를 지원하기 위한 기저 클래스
- 윈도우 메시지를 처리하는 MFC 클래스는 모두 CCmdTarget 클래스나 CCmdTarget의 파생 클래스로부터 상속받은 클래스임
- CCmdTarget 클래스는 실질적으로 메시지를 처리하는 것이 아니라 WM_COMMAND와 OLE 메시지만을 담당하고 있음
3) CWinThread 클래스
- 어떤 프로그램이 실행되려면 먼저 메모리에 프로그램이 적재되어야 함
- 메모리에 적재된 프로그램을 하나의 프로세스라 하고, 이 프로세스는 여러 가지의 작업으로 나누어질 수 있는데, 이 단위가 스레드(thread)라고 함
- 하나의 프로세스는 하나의 스레드를 가지고 있지만, 여러 가지 스레드를 가질 수 있음 (멀티 스레드)
- 중요한 것은 하나의 애플리케이션이 실행되고자 한다면 하나의 스레드가 생성되어야 한다는 점
- CWinThread 클래스가 하나의 윈도우를 스레드로 구동될 수 있게 하는 클래스
- CWinApp 클래스가 CWinThread 클래스로부터 상속 받은 이유는 윈도우가 하나의 스레드로 구동되게 하기 위한 것
- 윈도우 시스템은 여러 가지 프로그램을 동시에 실행시킬 수 있는 멀티태스킹을 지원하는 운영체제임
4) CWinApp 클래스
- 애플리케이션 생성에서 가장 먼저 애플리케이션 자체를 나타내는 CWinApp로 파생된 클래스의 객체가 생성됨
- 이 객체는 SDI의 경우 CSingleDocTemplate 클래스를, MDI의 경우 CMultiDocTemplate 클래스를 이용하여 템플릿 안에 포함된 클래스 즉, FrameWnd, View, Document 클래스들을 관리함
5) CWnd 클래스
- 화면에 출력되는 모든 윈도우의 기본 클래스이며, CCmdTarget의 파생 클래스로서 메시지 맵의 기능을 지원하며, 윈도우를 구동하기 위한 모든 기능을 내포한 클래스
- 윈도우를 제어하는데 필요한 공통된 기능은 CWnd 클래스에 정의되어 있고, CWnd의 파생 클래스가 많이 존재하므로 가장 많이 사용함
6) CFrameWnd 클래스
- 윈도우의 외곽 경계를 정의하는 기본 클래스
- CWnd 클래스로부터 상속받았기 때문에 공통으로 윈도우 메시지를 처리하며, 가시적으로 볼 수 있는 윈도우 전체 영역을 나타내고, 때에 따라서는 상태 표시줄, 도구상자를 포함함
- SDI 프로젝트 유형에서는 CFrameWnd 클래스로부터 상속받아 CMainFrame 클래스를 생성하게 됨
- MDI 프로젝트 유형에서는 CDMIFrameWnd 클래스와 CMDIChildWnd 클래스는 CFrameWnd 클래스로부터 상속받은 클래스
- CMainFrame 클래스는 CMDIFrameWnd 클래스로부터 상속받아 생성되며 윈도우 전체 영역을 나타내고 또, 다시 CChildWnd 클래스는 CMDIChildWnd 클래스로부터 상속 받아 전체 윈도우 내에 자식 윈도우를 나타냄
7) CView 클래스
- 윈도우의 작업 영역을 정의하는 기본 클래스이며, 이 클래스로부터 상속 받은 여러 가지 형태의 뷰 클래스들이 있음
- 이 클래스도 작업 영역으로 들어오는 메시지들을 처리할 수 있음
8) CDialog 클래스
- 모든 대화상자의 기본이 되는 클래스
- 대개 애플리케이션은 대화상자를 뺄 수 없을 만큼 많이 사용하므로 중요함
- CWnd 클래스로부터 상속받았으므로, 윈도우 메시지 처리를 할 수 있으며, 대화상자 고유의 기능으로 여러 가지 컨트롤들을 쉽게 사용할 수 있다는 장점이 있음
- Visual C++에서는 대화상자 폼의 디자인을 위한 Resource Editor를 제공하고 있음
9) CDocument 클래스
- 애플리케이션에서 사용되는 데이터를 저장하고 제어하는 클래스로써, 프레임워크에서 사용되는 클래스와는 약간 다른 성격을 가지고 있음
- 애플리케이션의 내부를 담당하고 있음
- 기본적으로 애플리케이션의 데이터 처리는 이 클래스에서 다루는 것이 좋고, 또한 디스크로의 입출력을 제공하므로 데이터의 입출력에 관한 내용은 이 클래스를 사용하는 것이 좋음
- 데이터를 이 클래스의 멤버 변수로 가지게 되며 뷰 클래스나 프레임 윈도우는 이 멤버 변수들의 데이터를 활용하여 표현하게 됨
- 이를 문서/뷰 구조라고 함
실습
- 마우스 이동, 마우스 왼/오 버튼 클릭, 키보드 클릭, 윈도우 크기를 출력하는 실습
- 여기서 주의했던 점은 윈도우에 출력하는 코드는 OnDraw() 함수에서 구현해야 함
- 윈도우가 다시 그려질 때 WM_PAINT 메시지가 발생하여 OnDraw() 함수가 실행되기 때문
'New > MFC 윈도우 프로그래밍' 카테고리의 다른 글
3. 메시지 처리 (2) (0) | 2024.12.11 |
---|---|
3. 메시지 처리 (1) (0) | 2024.12.08 |
2. MFC 개요 및 아키텍처 (1) (0) | 2024.12.02 |
1. 윈도우 프로그래밍의 이해 (3) (3) | 2024.11.29 |
1. 윈도우 프로그래밍의 이해 (2) (0) | 2024.11.26 |