MFC进队消息和不进队消息





进队消息基本上是用户的输入:击键的消息(WM_KEYDOWN、WM_KEYUP)键盘输入产生字符(WM_CHAR)、鼠标移动(WM_MOUSEMOVE)、
鼠标键(WM_LBUTTONDOWN)、计时消息(WM_TIMER)、刷新消息(WM_PAINT)和退出消息(WM_QUIT)




不进队消息是指由Windows直接调用消息处理函数,把消息直接交给其处理。而进队消息是指Windows将消息放入到程序中的
消息队列中取,并通过程序中的消息循环,循环把消息取出,经过一定处理(如例子中经过translate),然后由函数
DispathMessage函数将消息分发给消息处理函数处理


一般情况下,不进队消息的产生是由于调用了其他Windows函数。
如,当调用CreateWindow时,Windows将创建WM_CREATE消息、
当调用ShowWindow时,将产生WM_SIZE和WM_SHOWWINDOW消息、
当调用UpdateWindow时创建的WM_PAINT消息


(注意,并不是某个类型是进队消息就永远是进队消息,如WM_PAINT有进队的,也有不进队的)、还有其他进队消息也有可能
在不进队消息中出现,整个处理过程是复杂的,但由于Windows已经解决大部分的问题,因此我们可以认为我们获得的消息是
有序的、同步的。
发送消息:SendMessage 和 PostMessage,SendMessage为发送“不进队消息”,直接调用处理函数处理,返回处理函数处理结果。
ostMessage为发送“进队消息”。PostThreadMessage为向线程发消息


消息分为进队消息消息和非进队消息。所谓进队消息就是windows将消息发送到每个线程所专有的队列中,然后由程序自主处理,
这种消息基本上是由用户输 入产生(wm_keydown,wm_keyup,wm_char,wm_mouse**,以及wm_paint,wm_timer,wm_quit)或 者是调用
ostmessage,postthreadmessage产生的消息;所谓的非进队消息就是直接发送给窗口过程的消息,就是直接调用窗口过 程,上述
消息以外的一般都是这种类型! 
     各种消息是用户和系统之间的交互,系统内核收集。转发给各个应用程序的消息队列。每个线程一个消息队列
  
如,当调用CreateWindow时,Windows将创建WM_CREATE消息、当调用ShowWindow时,将产生WM_SIZE和WM_SHOWWINDOW消息、当调
用UpdateWindow时创建的WM_PAINT消息(注意,并不是某个类型是进队消息就永远是进队消息,如WM_PAINT有进队的,也有不进
队的)、还有其他进队消息也有可能在不进队消息中出现,整个处理过程是复杂的,但由于Windows已经解决大部分的问题,因此
我们可以认为我们获得的消息是有序的、同步的。
发送消息:SendMessage 和 PostMessage,SendMessage为发送“不进队消息”,直接调用处理函数处理,返回处理函数处理结果。
ostMessage为发送“进队消息”。PostThreadMessage为向线程发消息
 

你可能感兴趣的:(duilib)