while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } 這段代碼是Windows窗口程序的核心部分,每個有界面的軟件基本都會有這個結構。
簡單來說,只要是一個處理窗口的線程,就會有一個消息隊列,這是Windows系統定的規則。每當有事件發生時,系統就會往這個隊列里發消息。
GetMessage 的作用就是從隊列里取一條消息出來,接著用 TranslateMessage 把鍵盤的虛擬鍵轉成我們能理解的字符,比如A鍵可能變成字母a或A,具體看大小寫狀態。
然后 DispatchMessage 就負責把這條處理好的消息發給對應窗口的消息處理函數。每個窗口都有自己的處理函數,專門負責處理跟它相關的操作。
所以整個循環干的事就是:不停從消息隊列拿消息 → 碰到鍵盤消息就轉成字符 → 再把消息發給對應的窗口處理函數。就這么一直循環下去。
簡單來說,只要是一個處理窗口的線程,就會有一個消息隊列,這是Windows系統定的規則。每當有事件發生時,系統就會往這個隊列里發消息。
GetMessage 的作用就是從隊列里取一條消息出來,接著用 TranslateMessage 把鍵盤的虛擬鍵轉成我們能理解的字符,比如A鍵可能變成字母a或A,具體看大小寫狀態。
然后 DispatchMessage 就負責把這條處理好的消息發給對應窗口的消息處理函數。每個窗口都有自己的處理函數,專門負責處理跟它相關的操作。
所以整個循環干的事就是:不停從消息隊列拿消息 → 碰到鍵盤消息就轉成字符 → 再把消息發給對應的窗口處理函數。就這么一直循環下去。