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