2.2.3 传送消息

2013-10-07 15:57:52 · 作者: · 浏览: 66

2.2.3  传送消息

传送信息的具体过程如下。

(1) 从消息队列获取消息

可以通过PeekMessage()或GetMessage()函数从Windows消息队列中获取消息。Windows保存的消息队列是以线程来分组的,即每个线程都有自己的消息队列。

(2) 发送消息

发送消息到指定窗体一般通过两个函数完成,分别是SendMessage()和PostMessage()。

PostMessage():只是向线程消息队列中添加消息,如果添加成功就返回True,否则返回False,并不知道消息是否被处理,或具体的处理结果。

SendMessage():并不是把消息加入到队列里,而是直接翻译消息和调用消息处理,直到消息处理完成后才返回。

由此可见,如果希望发送的消息立即被执行,应该调用SendMessage()函数。

因为SendMessage()函数发送的消息不被加入到消息队列中,所以通过PeekMessage()或GetMessage()函数并不能获得由SendMessage()函数发送的消息。

并且有些消息用PostMessage()也不会发送成功,比如wm_settext。所以不是所有的消息都能够用PostMessage的。

此外还有一些其他的发送消息API函数,如PostThreadMessage()函数、SendMessage Callback()函数、SendMessageTimeout()函数、SendNotifyMessage()函数等。