728x90
반응형
하나의 윈도우 프로그램에는 여러 개의 창이 존재한다. 그리고 그 창에는 자기한테 들어온 메시지를 처리하기 위해 각자의 프로시저(Procedure)를 갖는다(엄밀히 창 클래스마다 프로시저를 갖는다). 그렇다면 어떻게 메시지 루프는 메시지에 알맞은 창을 찾을 수 있을까?
다음은 일반적인 윈도우 프로그램의 메인 메시지 루프(싱글스레드)이다.
// Main message loop:
while (GetMessage(&msg, nullptr, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
메시지 큐에서 GetMessage로 메시지를 가져와 TranslateMessage등으로 처리를 하고 최종적으로 DispachMessage 함수호출하여 윈도우 프로시저에 전달한다.
여기서 어떻게 메지시를 알맞은 윈도우 프로시저에 전달 할 수 있을까?
당연하게도 MSG구조체에 윈도우 HANDLE 필드가 존재한다.
typedef struct tagMSG {
HWND hwnd;
UINT message;
WPARAM wParam;
LPARAM lParam;
DWORD time;
POINT pt;
DWORD lPrivate;
} MSG, *PMSG, *NPMSG, *LPMSG;
DispatchMessage함수는 MSG구조체에 hwnd필드를 보고 해당 메시지를 받을 윈도우를 알 수 있다.
(별 내용은 아님)
https://docs.microsoft.com/en-us/windows/win32/winmsg/about-messages-and-message-queues#message-loop
728x90
반응형
'개발 > Windows' 카테고리의 다른 글
[Winui3] Unpackaged 프로젝트로 설정하기 (0) | 2024.05.26 |
---|---|
[WinUI3] WinUI3 써먹을 수 있을까? (0) | 2024.05.26 |
[Win32] 윈도우의 닫기 버튼을 눌렀을 때 일어 나는 일 (WM_CLOSE) (1) | 2022.07.31 |
HIWORD, LOWORD 매크로, DWORD 쪼개기 (0) | 2022.06.16 |
리소스 문자열을 CString으로 불러오는 법 (win32,mfc) (0) | 2022.03.02 |
댓글