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 就负责把这条处理好的消息发给对应窗口的消息处理函数。每个窗口都有自己的处理函数,专门负责处理跟它相关的操作。
所以整个循环干的事就是:不停从消息队列拿消息 → 碰到键盘消息就转成字符 → 再把消息发给对应的窗口处理函数。就这么一直循环下去。