Chinaunix首页 | 论坛 | 博客
  • 博客访问: 378684
  • 博文数量: 715
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5005
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:46
文章分类

全部博文(715)

文章存档

2011年(1)

2008年(714)

我的朋友

分类:

2008-10-13 16:36:14

dongchaomissyou:哈哈,总结起来就是SendMessage()发送消息经由窗口过程处理,PostMessage()则将消息放入消息队列,然后直接返回.
(发表于2004-3-24 9:30:00)

xiaojin:简单精辟!
(发表于2004-3-24 11:18:00)

流川:假如这个OnButton1被另一个线程调用着,而此时用户发出了退出消息(包括任何消息)是得不到返回的。
解决办法:
OnButton1中加入:
if (InSendMessage()) 
        ReplyMessage(TRUE); 
试试看,看看会不会发生死锁。
(发表于2004-5-19 10:05:00)

qiuchuan:出于杨老师的几篇COM的文章的帮助,我提几点看法:
解答完全错误。设置窗口文本的消息为WM_SETTEXT
SendMessage作为经常使用的函数,它当然要把消息放在消息队列中的。使用SPY等可以轻松地发现。否则,就不能使用钩子了。SendMessage与PostMessage的不同之处在于:
1.PostMessage一般用于一些特定的消息,如WM_PAINT,WM_COPYDATA等。其它消息都用SendMessage
2.PostMessage在当前不会被处理,需要等所有消息返回后。SendMessage在当前立即处理。如是保持当前消息不返回,就不会被处理。
3.SendMessage的代码可理解为(我没能力去反汇编,是自己猜的)先把一个消息放入消息队列,该消息的类型为S(SPY++中写的,应该意为Send),表示为发送的消息,然后调用处理消息的程序,返回其返回值,并发送消息返回的消息R(Return),虽使用了消息队列,但由于当前消息未返回,仍处于阻塞状态,消息队列不会处理该消息,等到当前消息返回后,其处理函数中调用的消息也已经有了返回消息,不会再次由GetMessage捕获。而PostMessage一定要等当前消息返回后才能调用,因为当前的消息队列处于阻塞状态,它一定要由GetMessage捕获后才能被处理。只要在消息遇到WM_SETTEXT中设一下断点,在WM_SETTEXT调用时,可以从调用堆栈中发现前面有WM_COMMAND的处理过程,位置指向于SendMessage。也就是说,GetMessage的过程只捕获由PostMessage发送的消息,并不处理由SendMessage发送的消息。
(发表于2005-8-28 19:24:00)

cgqhust:看来还是使用PostMessage比较方便!
(发表于2007-4-23 13:37:00)

..........................................................................
--------------------next---------------------

阅读(123) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~