地球人都知道,發送Windows消息可以使用SendMessage這個函數,但是你可知道,實際上SendMessage有好幾個變種,今天我們來具體羅列羅列。
最簡單的一個版本就是它自己啦:SendMessage。這個函數用來向一個目标窗口發送一條消息,然後一直等待目标窗口對此消息的回應。
接下來是SendMessageTimeout。它會發送一條消息,然後等待回應直至一段指定的時間過去。聰明的你可能立馬就感悟到了:SendMessage隻是一個特殊形式的SendMessageTimeout,隻是它的超時時間是無限時間而異。
下一個版本是: SendNotifyMessage。這個函數有點像SendMessage,隻是它發送消息之後,不會等待任何回應。它将立即返回并忽略掉接收窗口返回的任何回應。
最後一個版本是SendMessageCallback。它發送了一條消息之後會立即返回,而當接收窗口返回一個回應的時候,一個預先設定的回調函數會被調用。
聰明的你可能會再一次感悟到:SendNotifyMessage隻是SendMessageCallback的一個特例,隻是它的回調函數不會做任何事情。
至此,我們列舉了SendMessage的四個不同版本。
還需要注意如果你使用到了上面所說的任何一個發送消息的函數,并将消息發送給當前發送線程所屬的窗口,則調用會是同步進行的。
總結還依稀記得,我畢業後參加的第一場招聘會,一位老者就曾問我SendMessage和PostMessage的區别。對于不需要等待回應的消息,可以認為這條消息是一條通知,我一般使用PostMessage。而如果某條消息需要等待它的回應,我就簡答地使用SendMessage。
在拓撲梅爾智慧辦公平台(Topomel Box)的開發工程中,我一直遵循這個簡單的原則,它有效地簡化程序的設計和編寫。也就是說:要麼使用PostMessage,要麼就SendMessage。
最後Raymond Chen的《The Old New Thing》是我非常喜歡的博客之一,裡面有很多關于Windows的小知識,對于廣大Windows平台開發者來說,确實十分有幫助。本文來自:《The various ways of sending a message》
,
更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!