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()函数等。