ゲームやアプリのウィンドウは、「人の出入りがある受付カウンター」だと思ってください。この受付では次のようなことが起きます:
誰かがマウスをクリックした
キーボードを押した
ウィンドウを閉じようとしたこういった出来事(イベント)は、「メッセージ」としてパソコン内に届けられます。
Windowsは、「○○が起きましたよ」という通知をメッセージという形で送ってきます。
たとえば:
アプリの中には「郵便受け(メッセージキュー)」があり、そこにメッセージがどんどん届きます。 メッセージループは、その郵便受けをずっと見張って、届いたら処理に回す係です。
WinProcは、受付係(または配達先の人)です。 メッセージループから渡された「出来事(メッセージ)」に応じて、どう処理するかを決めます。
return DefWindowProc(hwnd, msg, wParam, lParam); // 他はWindowsに任せる }
| 実体 | たとえ |
|---|---|
| メッセージ | 郵便や伝票:「何が起きたか」の情報 |
| メッセージループ | 郵便受けを見張る人+仕分け係 |
| DispatchMessage | 書類を担当者に回す作業 |
| WinProc | 実際に中身を読んで処理する人 |
[ユーザーがマウスをクリック]
↓
[WindowsがWM_LBUTTONDOWNメッセージを送る]
↓
[メッセージループでPeekMessageが受け取る]
↓
[DispatchMessageでWinProcに転送]
↓
[WinProcが switch(msg) で判定して処理]
| 要素 | 役割 | イメージ |
|---|---|---|
| WinMain | ゲームの開始点 | C++のmain関数のようなもの |
| RegisterClassEx | ウィンドウの設計図を作る | 図面を描く |
| CreateWindowEx | ウィンドウを作る | 部屋を建てる |
| ShowWindow | 表示命令 | 部屋を見せる |
| メッセージループ | 出来事の監視と処理 | 郵便の仕分け係 |
| WinProc | 出来事に応じた処理 | 郵便に返事する係 |