mfc消息类型,mfc采用什么来处理信息
Windows编程中一个比较原始的问题就是消息循环,现在已经很少有人关心了;
我个人对消息流通比较感兴趣,很多细节想了解下!
解释以下消息循环中的常见函数,以便进行比较。
postmessage和SendMessage功能的比较
SendMessage将消息直接发送到窗口,并调用该窗口相应的消息处理函数。直到消息处理功能完成,SendMessage才会返回!SendMessage发送的消息没有进入系统的消息队列;SendMessage函数有返回值。
Message将消息发送到与创建窗口的线程关联的消息队列,并立即返回;PostMessage函数没有返回值;
getmessage和PeekMessage函数的比较
GetMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax)
PeekMessage(LPMSG lpMsg,HWND hWnd,UINT wMsgFilterMin,UINT wMsgFilterMax,UINT wRemoveMsg)
根据参数可以看出以上两个函数的区别。参数wRemoveMsg的作用是指定获取消息的方式。如果将其设置为PM_NOREMOVE,则不会从消息队列中移除消息。如果设置为PM_REMOVE,消息将从消息队列中删除。
存在差异:
如果它们没有捕捉到消息,程序的主线程将被操作系统挂起。当操作系统再次回来处理这个线程时,它发现消息队列中仍然没有消息。此时,这两个函数的行为是不同的:
GetMessage:如果你进不去,操作系统会再次挂起这个线程来照顾其他线程;
PeekMessage:收回控制权,让程序执行一段时间,等待可能的消息进入消息队列并捕获;此时,程序进入空闲时间阶段;