Delphi SendMessage PostMessage 原理和区别


本文整理自网络,侵删。

 
今天用实例解释一下SendMessage PostMessage 原理和区别:

向按钮(Button)发送单击:

SendMessage:

SendMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
SendMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);

PostMessage:

PostMessage(Button1.Handle, WM_LBUTTONDOWN, 0, 0);
PostMessage(Button1.Handle, WM_LBUTTONUP, 0, 0);
这2者都可以

但是向Edit发送字符串SendMessage可以,PostMessage就不行

Str := ‘ABC’;

PostMessage(Edit1.Handle, WM_SETTEXT, 0, LPARAM(str)); //不行

SendMessage(Edit1.Handle, WM_SETTEXT, 0, LPARAM(str)); //行

在MSDN中,SendMessage解释如为:The SendMessage function sends the specified message to a window or windows. It calls the window procedure for the specified

window and does not return until the window procedure has processed the message.
翻译成中文为:SendMessage函数将指定的消息发到窗口。它调用特定窗口的窗口处理函数,并且不会立即返回,直到窗口处理函数处理了这个消息。
再看看PostMessage的解释:The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window

and returns without waiting for the thread to process the message.
翻译成中文为:PostMessage函数将一个消息放入与创建这个窗口的消息队列相关的线程中,并立刻返回不等待线程处理消息。
仔细看完MSDN解释,我们了解到,SendMessage的确是发送消息,然后等待处理完成返回,但发送消息的方法为直接调用消息处理函数(即WndProc函数),按照函数调用规则,肯定会等消息处理函数返回之后,SendMessage才返回。而PostMessage却没有发送消息,PostMessage是将消息放入消息队列中,然后立刻返回,至于消息何时被处理,PostMessage完全不知道,此时只有消息循环知道被PostMessage的消息何时被处理了。

至此简单理解为:
SendMessage可以理解为,SendMessage函数发送消息,等待消息处理完成后,SendMessage才返回。稍微深入一点,是等待窗口处理函数返回后,SendMessage就返回了。
PostMessage可以理解为,PostMessage函数发送消息,不等待消息处理完成,立刻返回。稍微深入一点,PostMessage只管发送消息,消息有没有被送到则并不关心,只要发送了消息,便立刻返回。
作者:苍穹帝
来源:CSDN
原文:https://blog.csdn.net/gjtao1130/article/details/48000361

相关阅读 >>

Delphi word文档内容批量替换

Delphi 如何把程序钉到windows7任务栏(修正版)

Delphi 设置richedit的行间距

Delphi 能否把.txt文件的数据导入到access数据库中

Delphi删除目录及其子目录

Delphi 得到ip三个值

Delphi的tservice 服务路径获取 dll中获取文件路径

Delphi获取各种编码的识别符

Delphi 判断文件是否被占用

Delphi编程获取系统当前进程、窗口句柄、文件属性

更多相关阅读请进入《Delphi》频道 >>



打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,您说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

分享从这里开始,精彩与您同在

评论

管理员已关闭评论功能...