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의 주요 기능
- Window Class 등록 : CWinApp클래스는 window class를 등록하고, 부모인 CWinThread 클래스는 프로세스(Application)을 동작시킨다.
- 프로세스 동작을 처리, 관장 : 응용프로그램이 실행중일때, 사용자는 마우스나 키보드로 해당 응용프로그램을 다루게 된다. 실제로 응용프로그램은 자기자신이 선택이 되었는지, 최소화가 되었는지 등의 이벤트에 대해 알 수 없다. 응용프로그램은 하나의 메시지 큐를 가지고 있고, 이벤트가 발생하면 Window Manager가 메시지 큐에 그 정보를 알려준다.
- main window 생성
- CWinApp 클래스의 함수로 InitInstance 함수가 있는데 기본적으로 비어있는 함수이며, 반드시 내부에 메인윈도우 생성하는 코드를 재정의(Overriding)해서 사용해야 한다. CWinApp은 Application(및 각 인스턴스)을 초기화하고 Application 을 실행하기 위한 멤버 함수를 제공한다.
🍃 CwinApp의 구동 순서
- 프로그램이 시작되면 CWinApp 클래스의 인스턴스 생성
- Initlnstance 함수 실행 : 응용 프로그램이 초기화되는 시점에서 호출
- Run 함수 유지 : 메시지 루프 시작 지점에서 호출
- ExitInstance 함수 실행 : 응용 프로그램 종료 시 호출
5. CWnd
- 화면에 보여지는 윈도우를 담당하는 상위 클래스
- 직접 사용하지는 않고 하위 클래스에서 상속받아 사용한다.(CFrameWnd, CView, CDialog 등)
5-1. CFrameWnd
- 프레임이 있는 윈도우가 가져야할 기본 기능을 정의한 클래스
- 부모 윈도우가 없는 최상위 윈도우이며, 다양한 형식의 자식 윈도우를 가질 수 있다.
🍃 CFrameWnd 클래스의 주요 기능
- 창 관리: CFrameWnd 클래스는 윈도우의 주 창을 관리하는 데 사용된다. 이 클래스의 인스턴스는 주로 애플리케이션의 메인 창으로 사용되며, 다른 윈도우 및 컨트롤을 호스트하고 관리할 수 있다.
- 메뉴와 툴바 관리: 주 창은 일반적으로 메뉴 바와 툴바를 포함하며, 이러한 UI 요소들의 생성 및 관리를 담당한다.
- 다중 문서 인터페이스(MDI) 지원: CFrameWnd 클래스는 다중 문서 인터페이스를 지원한다. 이를 통해 여러 문서를 동시에 열고 탐색할 수 있다.
- 상태 표시줄 관리: 주 창은 일반적으로 상태 표시줄을 포함하며, 애플리케이션의 상태 정보를 표시하는 데 사용된다.
- 이벤트 처리: 사용자 입력 및 시스템 이벤트를 처리하여 애플리케이션의 동작을 제어한다. 예를 들어 창이 생성되거나 닫힐 때 실행해야 할 코드를 처리할 수 있다.
5-2. CView
- 화면 처리를 하는 뷰를 관리하는 클래스
- 뷰는 사용자와 도큐먼트간의 중계자의 역할이다. 사용자 <- 뷰 -> 도큐먼트
- 뷰는 오직 하나의 도큐먼트에 붙을 수 있다., 도큐먼트는 한번에 여러 개의 뷰를 가질 수 있다.
🍃 CView 클래스의 주요 기능
- 데이터 표시: CView 객체는 주로 문서 데이터를 표시하는 데 사용된다. 예를 들어 텍스트 편집기에서는 문서의 텍스트 내용을 표시하는 뷰를 만들 수 있다.
- 그래픽 출력: 그래픽 애플리케이션에서는 CView 클래스를 사용하여 그래픽 요소를 화면에 그릴 수 있다. 이를 통해 2D 또는 3D 그래픽을 표시할 수 있다.
- 사용자 입력 처리: 사용자의 마우스 클릭, 키보드 입력 등의 이벤트를 처리하여 사용자와 상호작용을 한다. 사용자 입력에 응답하여 문서 데이터를 수정하거나 애플리케이션의 상태를 변경할 수 있다.
- 뷰 업데이트: 문서의 데이터가 변경되었을 때 뷰를 업데이트하여 변경 사항을 사용자에게 반영한다. 이는 주로 문서 클래스와 함께 사용되어 데이터 변경 시 뷰를 자동으로 갱신한다.
- 화면 레이아웃 관리: 다양한 컨트롤과 그래픽 요소를 배치하여 사용자 인터페이스를 구성한다. 예를 들어 버튼, 텍스트 상자, 이미지를 뷰에 배치하여 사용자와의 상호작용을 제공할 수 있다.
🍃 CView에서 파생된 9개의 클래스
CView : 문서 데이터의 애플리케이션별 뷰에 대한 기본 클래스
- CScrollView : 스크롤 기능이 있는 뷰의 기본 클래스. 자동 스크롤을 제공하며 뷰 클래스를 파생한다.
폼 및 레코드 뷰
- CFormView : 다이얼로그 템플릿에 레이아웃이 정의된 스크롤 뷰.
- CDaoRecordView : DAO(Data Access Object 다이얼로그 박스 컨트롤을 기반으로 데이터베이스 레코드를 출력하는 뷰
- CRecordView : 다이얼로그 박스 컨트롤에 데이터베이스 레코드를 표시하는 뷰
컨트롤 뷰
- CCtrlView : 문서 사용을 허용하는 뷰 - 트리, 리스트, 리치 에디트 컨트롤을 가진 뷰 - 문서 구조를 허용하는 뷰
- CEditView : 간단한 멀티라인 텍스트 에디터를 제공하는 뷰. 도큐먼트의 뷰로써만 아니라 다이얼로그 박스의 컨트롤로써 CEditView 객체를 사용할 수 있다
- CRichEditView : 리치 에디트 컨트롤을 가지고 도큐먼트-뷰 구조의 사용이 가능한 뷰
- CListView : 리스트 컨트롤이 있는 뷰 - 문서 사용이 가능한 뷰
- CTreeView : 트리 컨트롤을 가지고 도큐먼트-뷰 구조의 사용이 가능한 뷰
5-3. CDialog
- 화면에 대화 상자를 표시하는데 사용되는 기본 클래스
- 모달과 모달리스 대화상자를 열 수 있다.(Domdal, Create)
- 다이어로그 안에 버튼, 텍스트 상자 등 UI 요소를 배치해 프로그램 동작을 제어하거나 사용자 입력을 받는다.
🍃 CDialog 클래스의 주요 기능
- UI 요소 배치: CDialog 클래스를 사용하여 버튼, 텍스트 상자, 체크 상자, 라디오 버튼 등의 다양한 UI 요소를 다이얼로그 상자에 배치할 수 있다.
- 이벤트 처리: UI 요소들에 이벤트 핸들러를 연결하여 사용자의 동작에 반응할 수 있다. 예를 들어 버튼 클릭, 텍스트 입력, 체크 상자 체크 변경 등의 이벤트를 처리하여 적절한 동작을 수행할 수 있다.
- 대화 상자 관리: CDialog 클래스는 다이얼로그 상자의 생성, 표시, 숨기기 등의 작업을 수행할 수 있다. 이를 통해 프로그램에서 필요한 시점에 다이얼로그 상자를 표시하고 사용자와의 상호작용을 할 수 있다.
- 데이터 전달: 다이얼로그 상자와 메인 애플리케이션 사이에 데이터를 전달할 수 있다. 이를 통해 사용자 입력을 받아 처리하거나, 설정을 변경하고 해당 설정을 메인 애플리케이션에 전달할 수 있다.
- 커스터마이징: CDialog 클래스를 상속하여 사용자 정의 다이얼로그 상자를 만들 수 있다. 이를 통해 프로그램에 특화된 UI 요소를 구현하거나 레이아웃을 변경할 수 있다.
🍃 CDialog와 CDialog EX
CDialogEx Class
CDialog의 자식 클래스인 CDialogEx는 대화상자의 배경 작업을 보다 쉽게 수정할 수 있게 제공한다.
6. CDocument
- 문서/뷰 구조에서 문서와 관련된 MFC 클래스이다.
- 이 클래스는 문서와 관련된 다양한 가상 함수를 제공해 자료를 처리할 수 있도록 도와주는 클래스이다.
- 데이터를 디스크에 읽고 쓰는 역할을 담당한다.
🍃 CDocument 클래스의 주요 기능
- 데이터 관리: 문서의 데이터를 저장하고 로드하는 기능을 제공한다. 이를 통해 사용자가 문서를 열고 저장할 수 있다.
- 연결된 뷰 관리: CDocument 객체는 하나 이상의 뷰와 연결될 수 있다. 이는 문서 데이터를 사용자에게 표시하는 데 사용되는 GUI 요소이며 CDocument는 뷰의 갱신 및 조정을 관리할 수 있다.
- 직렬화: CDocument는 객체의 상태를 디스크에 저장하고 다시 로드하는 직렬화 메커니즘을 제공한다. 이를 통해 문서의 상태를 영구적으로 보존할 수 있다.
- 명령 처리: 사용자 입력 또는 애플리케이션 이벤트에 응답하여 문서를 조작하는 기능을 제공. 사용자의 명령을 처리하고 적절한 작업을 수행할 수 있다.
반응형
'[C++] > MFC 프로그래밍 기초' 카테고리의 다른 글
[MFC] 2024/04/22 Thread 이용한 간단한 시계 (0) | 2024.06.11 |
---|---|
5. CCriticalSection 클래스 (0) | 2024.04.17 |
4. CString 클래스와 CTime 클래스 (0) | 2024.04.17 |
3. CWinThread와 AfxBeginThread (1) | 2024.04.17 |
2. DC(Device Context)와 CDC (0) | 2024.04.17 |