개발자 '쑥말고인절미'
[MFC] CWinApp 클래스와 CWnd 클래스 본문
MFC에서 사용하는 약자
- win : OS를 의미하는 Windows의 약자
- wnd : 프로그램의 영역을 표시하는 Window의 약자
CWinApp 클래스와 CWnd 클래스의 조합이 MFC 응용 프로그램을 구성하는 가장 최소 단위여서 이 두 클래스만 사용해도 MFC 응용 프로그램을 만들 수 있다. 단, 두 클래스를 직접 사용하면 기능에 대한 재정의가 불가능하기 때문에 파생클래스를 사용해야 한다. CWinApp 클래스로 윈도우 클래스를 등록하고, CWnd 클래스를 사용하여 메인 윈도우를 생성하면 프로그램에서 사용할 Window를 화면에 출력할 수 있다.
CWinApp 클래스 : 응용 프로그램과 관련된 작업(Window Class 등록, 메인 윈도우 생성, 메시지 처리)을 처리하는 클래스이다. Windows 응용 프로그램의 시작 함수인 WinMain에 있던 작업을 클래스로 구성한 것이다.
CWinApp = C(Class) + Win(Windows) + App(Application)
따라서 MFC 프로젝트 구성에서 CWinApp은 필수 클래스이기 때문에 응용 프로그램의 형식이 변경되더라도 CWinApp 클래스는 항상 포함되지만 클래스의 역할이 비교적 분명하기 때문에 개발자가 이 클래스의 기능을 변경하기 위한 작업을 하는 경우는 거의 없다. CWinApp 클래스의 주요 역할과 각 역할을 구현한 함수는 다음과 같다.
- 윈도우 클래스 등록 작업 : InitApplication, ExitApplication
- 메인 윈도우 생성 작업 : InitInstance, ExitInstance
- 응용 프로그램의 메시지 처리 작업 : Run
CWinApp 클래스를 그대로 사용하면 클래스의 기능을 변경할 수 없기 때문에 'MFC 프로그래밍'에서는 CWinApp 클래스의 파생 클래스를 만들어서 사용해야 하는데 CWinApp 클래스의 기능 중에 변경해야 할 기능이 있다면 위의 멤버 함수를 오버라이딩 하여 작업한다. InitInstance 함수는 반드시 오버라이딩하여 메인 윈도우를 생성하는 코드를 추가해야 한다.
CWnd 클래스 : Windows OS에서 Window를 표현하기 위해 만든, 응용 프로그램에서 사용자 환경을 구성할 때 사용하는 클래스이다.
CWnd = C(Class) + Wnd(window)
버튼, 에디트 컨트롤, 리스트 박스, 리스트 컨트롤, 콤보 박스와 같은 컨트롤들도 모두 Window이다. Windows 데스크톱 응용 프로그램을 구성하는 사용자 환경이 대부분 Window로 만들어졌다고 생각하면 된다. 따라서 CWnd 클래스는 일반 Window뿐만 아니라 컨트롤을 출력하기 위한 기반 클래스의 역할을 하기 때문에 MFC에서 활용도가 높은 클래스이고 실제로 가장 많이 사용하는 클래스이기도 하다.
'STUDY > C++ & MFC' 카테고리의 다른 글
[MFC] 파일 불러오기 구현 중 텍스트 깨짐 현상 (0) | 2022.04.14 |
---|---|
[MFC] Format()와 WriteString() (0) | 2022.04.13 |
[MFC] Win32 공부중 (0) | 2022.04.12 |
[22.04.11] noexcp과 Doc,View,MainFrm과 UpdateData() (0) | 2022.04.11 |
[MFC] UpdateData() 함수란? (0) | 2022.04.11 |