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