ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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
Designed by Tistory.