1. MFC의 구성 및 기본 클래스

2024. 4. 17. 10:36[C++]/MFC 프로그래밍 기초

 

 

  • CObject
  • CCmdTarget
  • CWinThread
  • CWinApp
  • CWnd
  • CDocument

1.  CObject

  • MFC 기본 구조의 최상위 클래스
  • 메모리에 클래스를 설정해주는 클래스

2.  CCmdTarget

  • 메세지 처리를 담당하는 클래스
  • 키보드 입력이나 마우스 클릭 등 사용자가 입력하면 메세지를 처리한다.

3.  CWinThread

  • Thread를 관리하는 클래스
  • 독립적인 모듈인 스레드는 하나의 프로그램 당 최소 하나가 필요하다.
  • C++에서는 CWinThread와 afxbeginthread를 통해 스레드를 생성해줄 수 있다.

4. CWinApp

  • 응용 프로그램과 관련된 클래스이다. 따라서, 응용프로그램 자체를 의미하는 클래스라 봐도 무방하다.
  • 메인 윈도우 생성, 클래스 등록과 같은 역할을 수행한다.
  • MFC 프로젝트를 구성하는 가장 기본적인 필수 클래스이다.
CWinApp = C(Class) + Win(Windows) + App(Application)
  • MFC 프로젝트 구성에서 CWinApp은 응용 프로그램의 형식이 변경되도 항상 포함된다.

 

🍃  CWinAPP의 주요 기능

  1. Window Class 등록 : CWinApp클래스는 window class를 등록하고, 부모인 CWinThread 클래스는 프로세스(Application)을 동작시킨다.
  2. 프로세스 동작을 처리, 관장 : 응용프로그램이 실행중일때, 사용자는 마우스나 키보드로 해당 응용프로그램을 다루게 된다. 실제로 응용프로그램은 자기자신이 선택이 되었는지, 최소화가 되었는지 등의 이벤트에 대해 알 수 없다. 응용프로그램은 하나의 메시지 큐를 가지고 있고, 이벤트가 발생하면 Window Manager가 메시지 큐에 그 정보를 알려준다.
  3. main window 생성
  4. CWinApp 클래스의 함수로 InitInstance 함수가 있는데 기본적으로 비어있는 함수이며, 반드시 내부에 메인윈도우 생성하는 코드를 재정의(Overriding)해서 사용해야 한다. CWinApp은 Application(및 각 인스턴스)을 초기화하고 Application 을 실행하기 위한 멤버 함수를 제공한다.

 

🍃  CwinApp의 구동 순서

  • 프로그램이 시작되면 CWinApp 클래스의 인스턴스 생성
  • Initlnstance 함수 실행 : 응용 프로그램이 초기화되는 시점에서 호출
  • Run 함수 유지 : 메시지 루프 시작 지점에서 호출
  • ExitInstance 함수 실행 : 응용 프로그램 종료 시 호출

 

5. CWnd

  • 화면에 보여지는 윈도우를 담당하는 상위 클래스
  • 직접 사용하지는 않고 하위 클래스에서 상속받아 사용한다.(CFrameWnd, CView, CDialog 등)

 

5-1. CFrameWnd

  • 프레임이 있는 윈도우가 가져야할 기본 기능을 정의한 클래스
  • 부모 윈도우가 없는 최상위 윈도우이며, 다양한 형식의 자식 윈도우를 가질 수 있다.

 

🍃 CFrameWnd 클래스의 주요 기능

  1. 창 관리: CFrameWnd 클래스는 윈도우의 주 창을 관리하는 데 사용된다. 이 클래스의 인스턴스는 주로 애플리케이션의 메인 창으로 사용되며, 다른 윈도우 및 컨트롤을 호스트하고 관리할 수 있다.
  2. 메뉴와 툴바 관리: 주 창은 일반적으로 메뉴 바와 툴바를 포함하며, 이러한 UI 요소들의 생성 및 관리를 담당한다.
  3. 다중 문서 인터페이스(MDI) 지원: CFrameWnd 클래스는 다중 문서 인터페이스를 지원한다. 이를 통해 여러 문서를 동시에 열고 탐색할 수 있다.
  4. 상태 표시줄 관리: 주 창은 일반적으로 상태 표시줄을 포함하며, 애플리케이션의 상태 정보를 표시하는 데 사용된다.
  5. 이벤트 처리: 사용자 입력 및 시스템 이벤트를 처리하여 애플리케이션의 동작을 제어한다. 예를 들어 창이 생성되거나 닫힐 때 실행해야 할 코드를 처리할 수 있다.

 

5-2. CView

  • 화면 처리를 하는 뷰를 관리하는 클래스
  • 뷰는 사용자와 도큐먼트간의 중계자의 역할이다. 사용자 <- 뷰 -> 도큐먼트
  • 뷰는 오직 하나의 도큐먼트에 붙을 수 있다., 도큐먼트는 한번에 여러 개의 뷰를 가질 수 있다.

 

🍃 CView 클래스의 주요 기능

 

  1. 데이터 표시: CView 객체는 주로 문서 데이터를 표시하는 데 사용된다. 예를 들어 텍스트 편집기에서는 문서의 텍스트 내용을 표시하는 뷰를 만들 수 있다.
  2. 그래픽 출력: 그래픽 애플리케이션에서는 CView 클래스를 사용하여 그래픽 요소를 화면에 그릴 수 있다. 이를 통해 2D 또는 3D 그래픽을 표시할 수 있다.
  3. 사용자 입력 처리: 사용자의 마우스 클릭, 키보드 입력 등의 이벤트를 처리하여 사용자와 상호작용을 한다. 사용자 입력에 응답하여 문서 데이터를 수정하거나 애플리케이션의 상태를 변경할 수 있다.
  4. 뷰 업데이트: 문서의 데이터가 변경되었을 때 뷰를 업데이트하여 변경 사항을 사용자에게 반영한다. 이는 주로 문서 클래스와 함께 사용되어 데이터 변경 시 뷰를 자동으로 갱신한다.
  5. 화면 레이아웃 관리: 다양한 컨트롤과 그래픽 요소를 배치하여 사용자 인터페이스를 구성한다. 예를 들어 버튼, 텍스트 상자, 이미지를 뷰에 배치하여 사용자와의 상호작용을 제공할 수 있다.

 

🍃  CView에서 파생된 9개의 클래스

 CView : 문서 데이터의 애플리케이션별 뷰에 대한 기본 클래스
  •  CScrollView : 스크롤 기능이 있는 뷰의 기본 클래스. 자동 스크롤을 제공하며 뷰 클래스를 파생한다.

폼 및 레코드 뷰

  • CFormView : 다이얼로그 템플릿에 레이아웃이 정의된 스크롤 뷰.
  • CDaoRecordView : DAO(Data Access Object 다이얼로그 박스 컨트롤을 기반으로 데이터베이스 레코드를 출력하는 뷰
  • CRecordView : 다이얼로그 박스 컨트롤에 데이터베이스 레코드를 표시하는 뷰

컨트롤 뷰

  • CCtrlView : 문서 사용을 허용하는 뷰 - 트리, 리스트, 리치 에디트 컨트롤을 가진 뷰 - 문서 구조를 허용하는 뷰
  • CEditView : 간단한 멀티라인 텍스트 에디터를 제공하는 뷰. 도큐먼트의 뷰로써만 아니라 다이얼로그 박스의 컨트롤로써 CEditView 객체를 사용할 수 있다
  • CRichEditView : 리치 에디트 컨트롤을 가지고 도큐먼트-뷰 구조의 사용이 가능한 뷰
  • CListView : 리스트 컨트롤이 있는 뷰 - 문서 사용이 가능한 뷰
  • CTreeView : 트리 컨트롤을 가지고 도큐먼트-뷰 구조의 사용이 가능한 뷰

 

5-3. CDialog

  • 화면에 대화 상자를 표시하는데 사용되는 기본 클래스
  • 모달과 모달리스 대화상자를 열 수 있다.(Domdal, Create)
  • 다이어로그 안에 버튼, 텍스트 상자 등 UI 요소를 배치해 프로그램 동작을 제어하거나 사용자 입력을 받는다.

🍃 CDialog 클래스의 주요 기능

  1. UI 요소 배치: CDialog 클래스를 사용하여 버튼, 텍스트 상자, 체크 상자, 라디오 버튼 등의 다양한 UI 요소를 다이얼로그 상자에 배치할 수 있다. 
  2. 이벤트 처리: UI 요소들에 이벤트 핸들러를 연결하여 사용자의 동작에 반응할 수 있다. 예를 들어 버튼 클릭, 텍스트 입력, 체크 상자 체크 변경 등의 이벤트를 처리하여 적절한 동작을 수행할 수 있다.
  3. 대화 상자 관리: CDialog 클래스는 다이얼로그 상자의 생성, 표시, 숨기기 등의 작업을 수행할 수 있다. 이를 통해 프로그램에서 필요한 시점에 다이얼로그 상자를 표시하고 사용자와의 상호작용을 할 수 있다.
  4. 데이터 전달: 다이얼로그 상자와 메인 애플리케이션 사이에 데이터를 전달할 수 있다. 이를 통해 사용자 입력을 받아 처리하거나, 설정을 변경하고 해당 설정을 메인 애플리케이션에 전달할 수 있다.
  5. 커스터마이징: CDialog 클래스를 상속하여 사용자 정의 다이얼로그 상자를 만들 수 있다. 이를 통해 프로그램에 특화된 UI 요소를 구현하거나 레이아웃을 변경할 수 있다.

🍃  CDialog와 CDialog EX

CDialogEx Class
CDialog의 자식 클래스인 CDialogEx는 대화상자의 배경 작업을 보다 쉽게 수정할 수 있게 제공한다.

 

 

6. CDocument

  • 문서/뷰 구조에서 문서와 관련된 MFC 클래스이다.
  • 이 클래스는 문서와 관련된 다양한 가상 함수를 제공해 자료를 처리할 수 있도록 도와주는 클래스이다.
  • 데이터를 디스크에 읽고 쓰는 역할을 담당한다.

 

🍃 CDocument 클래스의 주요 기능

  1. 데이터 관리: 문서의 데이터를 저장하고 로드하는 기능을 제공한다. 이를 통해 사용자가 문서를 열고 저장할 수 있다.
  2. 연결된 뷰 관리: CDocument 객체는 하나 이상의 뷰와 연결될 수 있다. 이는 문서 데이터를 사용자에게 표시하는 데 사용되는 GUI 요소이며 CDocument는 뷰의 갱신 및 조정을 관리할 수 있다.
  3. 직렬화: CDocument는 객체의 상태를 디스크에 저장하고 다시 로드하는 직렬화 메커니즘을 제공한다. 이를 통해 문서의 상태를 영구적으로 보존할 수 있다.
  4. 명령 처리: 사용자 입력 또는 애플리케이션 이벤트에 응답하여 문서를 조작하는 기능을 제공. 사용자의 명령을 처리하고 적절한 작업을 수행할 수 있다.

 

반응형