SendMessage和SendNotifyMessage的区别?
WINDOWS 中窗口之间的通讯方法有不少,互发消息便是其中的一种。SendMessage和SendNotifyMessage这两个函数的作用就是向其它窗口发送消息。它们看起来很象,调用参数也一样,只是返回值不同,前者返回一个LRESULT,而后者返回一个BOOL。根据MSDN的描述,当这两个函数的调用者与接收消息的窗口处于同一线程时,两者的执行情况一样,都是等待消息被处理完以后再返回;而当它们处于不同线程时,SendMessage所在的线程将等待目标窗口所在线程处理完这个消息,其间它处于阻塞(BLOCK)状态,SendNotifyMessage则是仅仅将消息传给目标窗口的窗口过程函数,并立即返回,它不会一直等着这条消息被处理完。
在我的程序里我需要一些窗口在发生某些事情时能通知另外一个窗口。所以一开始我使用SendNotifyMessage来发送消息,调用形式如下:
SendNotifyMessage(hwnd,WM_NOTIFY,ControlID,(LRESULT)pNMHDR);
pNMHDR指向了一个NMHDR结构,这个结构里的code字段用我自己定义的通知代码填充。在2000底下,程序运行良好,消息能正常发送,目标窗口也能正常接收。但是在98底下,SendNotifyMessage就无论如何都不能成功执行,总是返回FALSE,这样一来目标窗口当然也就接收不到消息了。我没有办法,只好将所有的SendNotifyMessage全部替换为SendMessage,这时消息的发送和接收才按照我预计的方式进行。需要补充说明的是,在整个程序里我只有一个线程,所以这种情况下SendNotifyMessage和SendMessage应该是没有差别的,但是实际情况却让我百思不得其解。是我的理解不对还是MSDN描述有误?我真希望早点知道答案。