참고링크

http://www.soen.kr/

https://docs.microsoft.com/ko-kr/windows/win32/winmsg/about-messages-and-message-queues


image

윈도우즈 (Windows)

메시지 구동 시스템 (Message Driven System)

메시지 발생 -> 프로그램은 메시지가 어떤 정보를 담고 있는가를 분석 -> 어떤 루틴을 호출할 것인지 결정


윈도우 메시지 (Window Message)

사용자나 시스템 내부적인 동작에 의해 발생된 일체의 변화에 대한 정보


윈도우 프로시저 (Window Procedure, WndProc)

메시지 처리 함수

윈도우즈에 의해 호출됨

운영체제에 의해 호출되는 응용 프로그램 내의 함수를 콜백(CallBack) 함수라 함

형태

LRESULT CALLBACK WndProc(HWND hWnd,UINT iMessage,WPARAM wParam,LPARAM lParam)
{
	switch(iMessage) {
	case WM_DESTROY:
		PostQuitMessage(0);
		return 0;
	}
	return(DefWindowProc(hWnd,iMessage,wParam,lParam));
}

인수

hWnd

메시지를 받을 윈도우의 핸들

iMessage

어떤 종류의 메시지인가, 어떤 변화가 발생했는가

wParam, lParam

iMessage의 메시지에 따른 부가적인 정보.

ex) WM_LBUTTONDOWN 메시지면 화면 어디쯤 눌러졌는지, 키보드 상황(Shift, Ctrl, Alt) 은 어떠한지 등


메시지 루프 (Message Loop)

윈도우즈 프로그램에서 메시지를 처리하는 부분

역할: 메시지 큐에서 메시지를 꺼내 메시지 처리 함수(WndProc)로 보내줌

순서

-> 메시지 큐에서 메시지 읽어들임

-> 읽어들인 메시지는 첫 번째 인수가 지정하는 MSG 구조체에 저장됨

-> 메시지가 WM_QUIT 일 경우 False 리턴 후 종료, 아니면 while 루프

형태

    while (GetMessage(&msg, nullptr, 0, 0))
    { 
        DispatchMessage(&msg); 
    }


메시지 큐 (Message Queue)

입력, 시스템 변화 등 이벤트가 메시지로 변환된 후 배치되는 공간

큐: 선입선출 방식의 자료구조. 발생한 시간 순서대로 처리할 필요가 있을 때 사용됨

댓글남기기