C++프로그래밍/MFC

Message driven 구조 (WinAPI)

season97 2025. 3. 6. 10:46

 

▶ 윈도우 메세지 

ㆍ 윈도우 메세지는 WM_xxx의 매크로 형태로 정의된 unsigned 정수이다.

ㆍ WPARAM 은 보통 키보드 LPARAM은 보통 마우스에 대한 이벤트를 처리한다.

 

메시지 큐

ㆍ 사용자가 입력을 하면 그 이벤트를 OS가 감지한 후 이를 메시지로 변환해 해당 응용 프로그램의 메시지큐에 전달을 한다)

 

ㆍ 메시지를 수신한 응용프로그램(Process)은 메시지 큐에서 메시지를 하나씩 꺼낸 후 처리(함수호출)를 하는 이벤트 루프 구조로 프로그램이 작동한다

 

ㆍ Process는 최소 1개 이상의 스레드로 구성되며 GUI를 갖는 프로세스의 메인 스레드는 메시지 큐를 가진다. 위 사진이 메시지큐 예시

 

 

메시지 핸들러 (HWND)

ㆍ 윈도우 프로시저 함수는 메시지 큐에서 메시지를 꺼내 1차 처리하는 함수

 

ㆍ 수백종의 메시지 중 필요한 것만 식별 후 처리하며 등록하지 않은 경우 시스템 기본 처리 규칙 적용

(winAPI32에선  switch-case였으나 MFC로 넘어가면서 Message MAP 으로 처리됨)

 

ㆍ 메시지마다 개별적인 처리 함수를 구현하는것이 보통이며 이를 메시지 핸들러(처리기)라고 지칭한다

 

ㆍ UI메뉴나 버튼클릭 시 발생하는 메시지는 구체적인 ID값을 추가로 전달한다

ㆍ 핸들(H) - > 값 (int) 또는 포인터 (void*인 경우가 많음) HINSTANCE도 타고 올라가면 void*로 재정의되어있음

 

WinMain 살펴보기

ㆍ 리소스 뷰에 들어가면 기본적으로 이렇게 설정되어 있다