Window Procedure 윈도우 프로시져

- 메세지 처리 전용 함수. WndProc 함수.

- WinMain이 아닌, 운영체제에 의해 호출된다.

- 윈도우 프로시저는 메시지가 들어오면 호출된 후 해당 메시지에 맞게 내용을 처리.
- 콜백함수이다. (콜백함수: 운영체제에 의해 호출되는 응용프로그램 내 함수. 사용자 호출x)

- WndProc 함수 인수

  • HWND hWnd
  • UINT iMessage
  • WPARAM wParam
  • LPARAM lParam



Message Loop 메시지 루프

- 윈도우 프로그램(주로 WinMain함수 끝에 위치)에서 메시지를 처리하는 부분
- 함수 종류: GetMessage(), TranslateMessage(), DispatchMessage()
- GetMessage 함수:

  • 큐에서 메시지를 검색하여 MSG 형식의 구조로 복사.
  • 1(true)을 반환.
  • WM_QUIT 메시지 발생 시 0(false)을 반환 후 루프 종료.

- DispatchMessage 함수

  • MSG 구조에 지정된 
  • 1(true)으로 반환.

 


Message Queue 메시지 큐

- 임시 메세지 저장 영역.
- Message Queue loading process

  • Input(Keyboard, Mouse click, etc) -> System Message Queue -> Thread Message Queue
  • Thread Message Queue distributes message info to windows.
  • Each Thread Message Queue can contain multiple windows.

- Thread Message Queue에 저장된 메시지들을 GetMessage 함수 또는 PeekMessage 함수로 가져올 수 있다.

- PeekMessage 함수를 사용하면 메시지 큐를 검사할 수 있다.



Window Message 윈도우 메시지

- 윈도우에 사용자 입력(ex.마우스, 키보드 등)에 의한 이벤트들이나 윈도우의 시스템적 상태(ex.윈도우 크기 색 변화 등)가 변경되었을 시 윈도우 운영체제가 해당 상황을 윈도우로 보내주는 메시지

- 윈도우 메시지: 윈도우를 소유한 스레드만 사용 가능. (이벤트 객체: 모든 스레드 사용 가능)

- 윈도우 메시지 발생 시 2가지 방법 중 하나로 메시지를 전달

1. 메시지 큐에 메시지를 추가

- 사용자 입력

2. 어플리케이션의 윈도우 프로시저에 메시지를 직접 전달

- 특정 윈도우에 작업을 지시하는 메시지

- 처리속도가 빠르다

 

- Event -> System Message Queue -> Thread Message Queue -> Message Loop -> Window Procedure

 

 

 

PeekMessage 함수를 사용하여 긴 작업 중에 메시지 큐를 검사할 수 있습니다. PeekMessage  GetMessage 함수와 비슷합니다. 둘 다 필터 조건과 일치하는 메시지에 대한 메시지 큐를 확인한 다음 MSG 구조에 메시지를 복사합니다. 두 함수 간의 주요 차이점은 필터 조건과 일치하는 메시지가 큐에 배치될 때까지 GetMessage 가 반환되지 않는 반면 PeekMessage 는 메시지가 큐에 있는지 여부에 관계없이 즉시 반환된다는 것입니다.

'⭐ DirectX > DirectX11 2D + WinAPI' 카테고리의 다른 글

[WinAPI] Bullet 속도를 Gauge Bar와 연동  (0) 2022.07.29
[winAPI] 시계 만들기  (0) 2022.07.22
[WinAPI] 도형 만들기  (0) 2022.07.07
[WinAPI] 좌표 활용 연습  (0) 2022.07.07
[WinAPI] Windows API  (0) 2022.07.01