메시지 처리 기본
Visual C++ 프로그램은 마우스나, 키보드 등의 사용자가 발생시키는 이벤트에 대해 감지하다가,
해당 이벤트가 발생하면, 이에 해당하는 함수를 호출하는 방식으로 진행된다.
메시지 (Message)
프로그램에서 마우스나, 키보드를 조작하면 OS는 이에 대응하는 메시지를 프로그램에 보낸다.
그리고 프로그램은 OS로부터 받은 메시지에 상응하는 처리를 하게 된다.
메시지 종류
메시지는 처리하는 주체에 따라 Windows message, Control notification message, Command message로 나뉜다.
- Windows message
WM_ 로 시작하는 메시지, (단 WM_COMMAND는 제외)윈도우 상태가 바뀌거나, 메뉴나 대화 상자를 초기화할 때 발생한다.
마우스, 키보드 입력 시 발생하는 메시지이다. - Control notification message
Button, Combo box와 같은 제어 객체에서 보내는 메시지.
자식 윈도우에서 부모 윈도우로 보내는 메시지. - Command message
메뉴, 툴바와 같은 사용자 인터페이스 객체로부터 발생되는 WM_COMMAND 메시지.
메시지 맵 (Message Map)
Win32 SDK에서는 switch문을 이용해 메시지를 처리한다.
MFC는 메시지 맵이라는 메커니즘을 이용해 처리한다.
메시지 맵은 메시지 맵 메시지 맵 선언과 메시지 맵 구현으로 구성된다.
Application Wizard에 의해 메시지 맵 구조를 생성한 후,
Class Wizard에 의해 메시지 핸들러가 추가될 때마다, 메시지에 대한 선언과, 구현이 메시지 맵 구조에 추가된다.
메시지 핸들러 (message handler)
이벤트가 발생했다는 메시지를 받았을 때, 그 메시에 대한 처리를 하기 위한 함수
메시지 핸들러 동작 예시
만약, 프로그램에서 마우스 왼쪽 버튼을 누르게 되면, OS에서 WM_LBUTTONDOWN 메시지가 발생해 해당 프로그램에게 전송된다.
프로그램은 WM_LBUTTONDOWN 메시지에 상응하는 OnLButtonDown()이라는 메시지 핸들러가 자동으로 호출된다.
이러한 경우에 어떤 동작을 하고 싶다면, 해당 동작 코드를 OnLButtonDown() 핸들러에 넣으면 된다.
OnLButtonDown() 메시지 핸들러를 생성하려면, ClassWizard를 이용한다.
'정리 작업중' 카테고리의 다른 글
Message Box (0) | 2022.08.04 |
---|---|
Class Wizard (0) | 2022.08.02 |
MFC 주요 클래스 (0) | 2022.07.30 |
MFC란 (0) | 2022.07.30 |
윈도우 프로그래밍의 시작 (0) | 2022.07.28 |