C++프로그래밍/MFC

CWnd와 윈도우 속성, 윈도우 관계 ,좌표계

season97 2025. 3. 6. 16:43

# 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

• 화면에서겹쳐 보이는 윈도우들 간의 순서