MFC

MFC 클래스 계층도

디버그정 2008. 8. 7. 16:59
사용자 삽입 이미지

그 중 중요한 몇 개의 클래스를 요약해 보면,

1. CObject 클래스
  MFC의 최상위 기저 클래스로써 메모리에 클래스를 설정하는 기능을 가진 클래스이다. CObject 클래스는 클래스 루트로써만 작용하는 것이 아니라, 다음과 같은 서비스와 기능을 제공한다.
 
  직렬화(Serialization)의 지원 : 현재 클래스의 객체가 디스크에 저장이 가능하도록 지원하고, 저장 유무를 확인할 수 있다.
  Run-time 클래스 정보 : 현재 클래스의 상태를 확인하고 오류를 정리할 수 있다.
  객체의 검사 출력 : 클래스의 객체가 유효한지 검사한다.
  컬렉션 클래스에 대한 호환성 제공 : 컬렉션 클래스에 저장 가능한 객체는 CObject 클래스를 상속받는 클래스만이 가능하다. 그래서 사용자 클래스를 제작해 컬렉션 클래스에 저장하고자 한다면 항상 CObject를 상속받아야 한다.


2. CCmdTarget 클래스
  MFC의 메시지 맵 아키텍처를 지원하기 위한 기저 클래스이다. 윈도우 메시지를 처리하는 MFC 클래스는 모두 CCmdTarget 클래스나 CCmdTarget의 파생 클래스로부터 상속받은 클래스이다. MFC 프레임워크에 존재하는 뷰 클래스, 메인 프레임 클래스, 도큐먼트 클래스가 기본적으로 윈도우 메시지를 처리할 수 있는 이유가 CCmdTarget 파생 클래스로부터 상속받았기 때문에 가능한 것이다. 혹 사용자 클래스를 정의하는데 윈도우 메시지 처리가 필요할 경우는 꼭 CCmdTarget 클래스나 CCmdTarget 파생 클래스로부터 상속받아야 한다는 것을 잊지 말아야 할 것이다. 그러나 CCmdTarget 클래스는 실질적으로 메시지를 처리하는 것이 아니라 WM_COMMAND와 OLE 메시지만을 담당하고 있다.

3. CWinThread 클래스
  어떤 프로그램이 실행되려면 먼저 메모리에 적재되어야 한다. 메모리에 적재된 프로그램을 하나의 프로세스라 한다. 그리고 이 프로세스는 여러 가지 작업으로 나누어질 수 있는데, 이 단위가 스레드(thread)라고 한다. 하나의 프로세스는 하나의 스레드를 가지고 있지만, 여러 가지 스레드를 가질 수 있다. 이것이 멀티스레드라고 한다. 프로그래밍 기법 중에 멀티스레딩이라는 것이 있는데, 프로그램을 작업 단위로 즉, 스레드로 나누어 프로그래밍 하는 것이다. 중요한 것은 하나의 응용 프로그램이 실행되고자 한다면, 하나의 스레드가 생성되어야 한다는 점이다.

  바로 CwinThread 클래스가 하나의 윈도우를 스레드로 구동될 수 있게 하는 클래스이다. CWinApp 클래스가 CWinThread 클래스로부터 상속받는 이유는 윈도우가 하나의 스레드로 구동되게 하기 위한 것이다. 윈도우 시스템이 멀티태스킹을 지원하는 운영체제라는 사실은 알고 있을 것이다. 즉 여러 가지 프로그램을 동시에 실행시킬 수 있다는 것이다. 이러한 윈도우 시스템에서 MFC 프로그램이 구동되기 위하여 CWinThread 클래스로부터 상속받는 이유는 당연한 것이다.

4. CWinApp 클래스
  애플리케이션 생성에서 가장 먼저 애플리케이션 자체를 나타내는 CWinApp로 파생된 클래스의 객체가 생성된다. 이 객체는 SDI의 경우 CSingleDocTemplete 클래스를, MDI인 경우 CMultiDocTemplete 클래스를 이용하여 템플릿 안에 포함된 클래스 즉, View, Document, FrameWnd 클래스들을 관리한다. CwinApp로부터 파생된 클래스안에 InitInstance() 함수 내부를 살펴보면 각 프로젝트 유형에 맞는 템플릿 클래스가 생성되 있는 것을 알 수 있다.

5. CWnd 클래스
  화면에 출력되는 모든 윈도우의 기저 클래스이며, CCmdTarget의 파생 클래스로서 메시지 맵의 기능을 지원하며, 윈도우를 구동하기 위한 모든 기능을 내포한 클래스이다. 윈도우를 제어하는데 필요한 공통된 기능은 CWnd 클래스에 정의되어 있고, CWnd의 파생클래스가 많이 존재하기 때문에 가장 많이 사용할 것이다. 예를 들면 우리가 많이 사용하는 뷰 클래스, 프레임 클래스, 대화상자 클래스 등이 CWnd 클래스를 상속받은 것 들이다.

6. CFrameWnd 클래스
  윈도우의 외곽 경계를 정의하는 기저 클래스이다. CWnd 클래스로부터 상속받았기 때문에 공통적으로 윈도우 메시지를 처리하며, 가시적으로 볼 수 있는 윈도우 전체 영역을 나타내고, 때에 따라서는 상태바, 도구상자를 포함한다. 그리고 SDI 프로젝트 유형에서는 CFrameWnd 클래스로부터 상속받아 CMainFrame 클래스를 생성하게 된다. MDI 프로젝트 유형에서는 CMDIFrameWnd 클래스와 CMDIChildWnd 클래스는 CFrameWnd 클래스로부터 상속받은 클래스이다. CMainFrame 클래스는 CMDIFrameWnd 클래스로부터 상속받아 생성되며 윈도우 전체영역을 나타내고, 또 다시 CChildWnd 클래스는 CMDIChildWnd 클래스로부터 상속받아 전체 윈도우 내에 자식 윈도우를 나타낸다.

7. CView 클래스
  윈도우의 작업영역을 정의하는 기저 클래스이며, 이 클래스로부터 상속받은 여러 가지 형태의 폼 윈도우들이 있다. 이 클래스도 작업 영역으로 들어오는 메시지를 처리할 수 있다. 윈도우의 공통적인 속성은 Cwnd 클래스에 정의되어 있지만, 각 클래스마다 고유한 기능과 제어가 필요하므로 그냥 지나치는 일이 없도록 한다.

8. CDialog 클래스
  모든 대화상자의 기본이 되는 클래스이다. 대게 응용 프로그램은 대화상자를 뺄 수 없을 만큼 많이 사용하므로 중요한 클래스이다. CWnd 클래스로부터 상속받았으므로, 윈도우 메시지 처리를 할 수 있으며, 또한 대화상자 고유의 기능으로 여러 가지 컨트롤들을 쉽게 사용할 수 있다는 장점이 있다. 또한 Visual C++에서는 폼의 디자인을 위한 Resource Editor를 제공하고 있다.

9. CDocument 클래스
  애플리케이션에서 사용되는 데이터를 저장하고 제어하는 클래스로써, 프레임워크에서 사용되는 클래스와는 약간 다른 성격을 가지고 있다. 애플리케이션의 내부를 담당하고 있는 것이다. 기본적으로 애플리케이션의 데이터 처리는 이 클래스에서 다루는 것이 좋고, 또한 디스크로의 입 출력을 제공하므로 데이터의 입 출력에 관한 내용은 이 클래스를 사용할 것을 권장한다. 데이터를 이 클래스의 멤버 변수로 가지게 되며, 뷰 클래스나 프레임 윈도우는 이 멤버 변수들의 데이터를 활용하여 표현하게 된다. 이것을 Document/View Structure라고 말하고 있다.

'MFC' 카테고리의 다른 글

강력한 에디터 CRichEditView  (0) 2008.08.30
◎ MFC Class 레퍼런스(한글번역)  (0) 2008.08.30
지킴이 기초 강좌  (1) 2008.08.29
CCmdTarget Class MFC  (1) 2008.08.07
MFC 클래스의 최상위 클래스 CObject  (2) 2008.08.07
DECLARE_DYNCREATE 매크로 풀어쓰기...  (2) 2008.07.30
DECLARE_DYNCREATE와 IMPLEMENT_DYNCREATE  (2) 2008.07.30