-
CWnd 클래스와 윈도우 속성 및 윈도우 관계MFC 2025. 4. 6. 12:44
CWnd ----> CCmdTarget ----> CObject CObject
↑
CCmdTarget → 메시지 맵(Message Map) 기능 제공
↑
CWnd → 실제 윈도우(창)를 나타내는 클래스CObject
- MFC의 모든 클래스의 기본 뿌리 클래스
- RTTI(런타임 타입 정보), 직렬화 등 핵심 기능 제공
CCmdTarget
- 메시지 맵(Message Map) 기능을 구현한 핵심 클래스
- ON_COMMAND, ON_WM_XXX 등 메시지 처리를 매핑해서 Lookup 방식으로 처리
- CWinApp, Cwnd, CDocument, CView 등 많은 클래스가 CCmdTarget을 상속받음
CWnd
- Windonws의 창(Window) 을 추상화한 클래스
- 실제 윈도우의 생성, 메시지 처리, UI 제어를 담당
기존 이벤트 루프 방식은 큐에 메시지가 쌓이면 윈도우 처리기가 Switch-case로 이벤트를 처리하였으나,
Look-up Array 방식의 메시지 맵을 통해 효율적으로 메시지를 처리한다.
윈도우에서 CWnd 클래스가 핵심이다.
- 식별자(핸들, ID) 핸들의 자료형은 HWND (주민등록번호), ID는 반 번호 느낌
- 좌상단 좌표(CPoint)와 폭과 높이(CSize)
- 윈도우 스타일 (상수정의) - 프레임, 차일드
- 윈도우 상태 - 보이기 여부 (Enabled, Disabled)
- 윈도우 프로시저 - 최상위 프레임 윈도우마다 개별 스레드와 메시지큐 존재
역할 클래스 설명 비유 메시지를 받아서 처리하는 창 CWnd 실제 윈도우 핸들(HWND)을 가지며 화면에 보여지고 메시지를 받음 '무대 위의 배우' 메시지를 처리하는 로직 CCmdTarget 메시지 맵을 가지고 있고, 메시지를 어떤 함수로 처리할 지 결정함 '배우가 외우는 대본' 윈도우 관계
- 부모, 자식, 형제 관계
- 최상위 부모 윈도우는 바탕화면(Desktop)
- 모든 프레임 윈도우의 부모는 바탕 화면
- 바탕 화면의 핸들은 null
- 만약 부모가 Disabled되면 자식도 같이 Disabled되는게 일반적
- 자식 윈도우는 부모 윈도우의 상태를 공유
- 보임 여부 및 위치
- 만약 A라는 창과 B라는 창이 겹쳐있을때 B를 클릭하면 B는 Active상태가 된다. 자식도 마찬가지로 Active상태로
부모 상태를 공유 받는다.
- 자식 윈도우의 위치는 부모 윈도우를 기준으로 계산
- 부모 윈도우 이동 시 자식 윈도우도 함께 이동
윈도우를 MFC로 어플리케이션을 개발하면 최상단에는 부모 프레임 윈도우가 존재한다.
프레임 윈도우가 있으면 그 윈도우 안에 각종 차일드가 붙는다.
Child 윈도우 4,5번 입장에서는 window2가 부모가 된다.
그러나 최상위 프레임 윈도우는 Parent frame window이다.
'MFC' 카테고리의 다른 글
SDI 구조 및 객체 생성 순서 (0) 2025.04.06 SDI 예제 생성 (0) 2025.04.06 솔루션, 프로젝트, 리소스 (0) 2025.04.04 CString 클래스와 CFile 안내 (0) 2025.04.04 MBCS와 유니코드 (0) 2025.04.03