본문 바로가기

C#/Windows

윈도우 프로그래밍 동작 방식

728x90

구성 요소

  • 메세지(Message)
  • 메세지 큐(Message Queue)
  • 메세지 루프(Message Loop)
  • 윈도우 프로시저(Windows Procedure)

메시지(Message)

메시지는 윈도우에 발생하는 모든 이벤트(사건)을 의미합니다. 키보드로 입력하고, 마우스로 클릭하는 것 뿐만 아니라, 마우스가 이동하는 등의 사소한 이벤트들을 모두 메시지로 관리합니다. 윈도우 내에서 발생하는 대부분의 이벤트들은 이미 미리 정의가 되어 있습니다. 그렇다면 개발자들이 이런 사소한 이벤트들을 모두 코드로 관리해야할까요? 

당연히 그렇지 않습니다. 각 윈도우에 어떤 사건이 발생하는지 지속적으로 확인하고 메시지로 만들어서 처리하는 것은 모두 운영체제의 역할입니다. 윈도우 내에 어떤 사건이 발생하면 운영체제는 메시지를 만들어서 해당 윈도우가 속한 메시지 큐에 저장하게 됩니다.

 

메시지 큐(Message Queue)

운영체제가 만들어낸 메시지는 메시지 큐에 저장하게 됩니다. 자료구조에서 배웠듯 큐 특성상 FIFO 구조로 먼저 들어온 메시지를 순차적으로 먼저 처리하게 됩니다. 해당 매시지들은 매크로 상수로 변환되어 메시지 큐에 저장됩니다. 이는 개발자의 편의를 고려한 것이라고 생각됩니다.

 

메시지 루프(Message Loop)

메시지 루프는 메시지 큐에 들어있는 메시지를 읽어서 처리를 위해 윈도우 프로시저로 전송하는 반복문입니다. 메시지에 따라서 알맞은 형태로 변환해서 윈도우 프로시저로 전송합니다.

 

윈도우 프로시저(WndProc; Windows Procedure)

메시지 루프에서 알맞은 형태로 변환된 메시지를 받습니다. 이렇게 전송받은 메시지를 사전에 정의된 내용에 맞게 처리하는 함수입니다. 사전에 정의된 내용은 당연히 개발자가 작성해놓은 것이겠지요. 개발자는 프로시저의 메세지 처리방식을 정의해서 프로그램을 개발하게 됩니다.

 

해당 과정을 프로그램이 끝날때까지 계속해서 반복하게 됩니다.

 

[출처]

https://chanos.tistory.com/entry/Window-API-API-MFC%EB%9E%80-%EC%9C%88%EB%8F%84%EC%9A%B0-%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D-%EB%8F%99%EC%9E%91-%EB%B0%A9%EC%8B%9D#%EB%A-%--%EC%-B%-C%EC%A-%--%--%EB%A-%A-%ED%--%---Message%--Loop-

728x90

'C# > Windows' 카테고리의 다른 글

WndProc으로 Windows Message 제어하기  (0) 2023.11.05
Win32 API에서 제공하는 자료형  (0) 2023.11.05
Win64 API가 있나요?  (0) 2023.11.05
Windows API  (0) 2023.11.05