# CWnd 클래스
말 그대로 Window를 구현해 놓은 클래스다
# CCmdTarget
ㆍ 메시지맵에 대한 기능을 제공한다. 이것을 알려면 WinProcedure에 대한 개념이 있어야 한다.
ㆍ WindowAPI에서는 프록시저가 메시지를 처리해주는 콜백함수였다. (이벤트가 들어왔을때 스위치케이스를 통해 어떤 메시지 이벤트인지 분기를 나누어 처리한다)
# CWnd
# 하지만 스위치 케이스는 성능이 안좋으니 MFC는 메시지맵으로 구현했다.
ㆍ 그 메시지 맵의 기능을 하는게 CCmdTarget클래스다. CWnd는 이를 상속받은 클래스 이므로 그 기능을 공유받는다.
ㆍ 메시지맵을 윈도우 좌표계에 맞게 더 구체화해서 구현해 놓은 친구가 CWnd이다
(그 양이 정말 어마어마하다)
https://learn.microsoft.com/en-us/cpp/mfc/reference/cwnd-class?view=msvc-170
거의 영어사전급.... 핵심적인거만 알자
▶ CWnd 중요한 멤버데이터는 HWND m_hwnd
윈도우 핸들이다.
# 윈도우의 속성
윈도우란 기본적으로 좌표를 가지고있는데, 얘 자체를 식별할땐 핸들로한다.
ㆍ 식별자(핸들, ID) 핸들은 주민등록번호, ID는 음... 반번호정도?? 바뀔수도있다.
ㆍ 좌상단 좌표 (CPoint)와 폭과 높이(CSize) POINT와SIZE 구조체를 객체화 시킨 클래스다.
ㄴ덧셈연산같은걸 제공해준다-편리함
ㆍ 윈도우 스타일(상수 정의) : WS_xxxx - 외우지 말고 그때그때 찾아보자
ㆍ 윈도우 상태 : 보이기 여부
ㆍ 윈도우 프록시저 : 최상위 프레임 윈도우마다 개별 스레드와 메시지큐 존재 (스레드에 메시지큐가 붙어있는구조)
여러개의 스레드가 합쳐져 프로세스를 구성한다. (멀티스레딩)
#윈도우 관계
ㆍ 위 윈도우가 여러개가 있으면 서로 관계가 있을것이다. 부모,자식,형제 관계같이.
- 최상위 부모 윈도우는 바탕화면 - 바탕화면 자체도 윈도우다
- 모든 프레임 윈도우(최상위 윈도우)의 부모는 바탕화면
- 바탕 화면의 핸들은 null
ㆍ 자식 윈도우는 부모 윈도우의 상태를 공유
- 보임 여부 및 위치
ㆍ 자식 윈도우의 위치는 부모 윈도우를 기준으로 계산된다. (좌표개념)
- 패널이 움직일 경우 위에 올라가있는 UI도 함께 움직인다.
ㆍ Parent frame window에 자식... 자식의 자식이 있을수도 있고... 예시의 사진을 보면 단번에 이해된다.
# 윈도우 좌표계
좌상단 0,0, 우하단 화면의 MAXSIZE
모니터에 표현되는 2차원 좌표계
※Child 윈도우의 경우에는 그 자식을 기준으로 좌표를 계산한다. (상대적 관점)
Z-order
• 화면에서겹쳐 보이는 윈도우들 간의 순서
'C++프로그래밍 > MFC' 카테고리의 다른 글
SDI 프레임워크 분석과 순서 (0) | 2025.03.07 |
---|---|
SDI 각 클래스 접근 방식과 역할 (0) | 2025.03.07 |
윈도우 기초 이론 - 솔루션, 프로젝트, 리소스 (0) | 2025.03.06 |
CString 과 CFile (문자열 편하게 처리하기) (0) | 2025.03.06 |
MBCS와 유니코드 (dll,lib 주의) (0) | 2025.03.06 |