![](https://csdnimg.cn/release/download_crawler_static/86990271/bg4.jpg)
借 API 函数 SendMessage 向指定窗口发送消息。收到消息方负责比较数据大小,
把比较结果通过消息本身的返回值传给消息发送方。所实现的功能与回调函数并
无不同。当然,此例中改为消息纯属画蛇添脚,反倒把程序搞得很慢。但其他情
况下并非总是如此,特别是需要异步调用时,发送消息是一种不错的选择。假如
回调函数中包含文件处理之类的低速处理,调用方等不得,需要把同步调用改为
异步调用,去启动一个单独的线程,然后马上执行后续代码,其余的事让线程慢
慢去做。一个替代办法是借 API 函数 PostMessage 发送一个异步消息,然后立
即执行后续代码。这要比自己搞个线程省事许多,而且更安全。
如今我们是活在一个 object 时代。只要与编程有关,无论何事都离不开
object。但 object 并未消除回调,反而把它发扬光大,弄得到处都是,只不过大
都以事件(event)的身份出现,镶嵌在某个结构之中,显得更正统,更容易被
人接受。应用程序要使用某个构件,总要先弄清构件的属性、方法和事件,然后
给构件属性赋值,在适当的时候调用适当的构件方法,还要给事件编写处理例程,
以备构件代码来调用。何谓事件?它不过是一个指向事件例程的地址,与回调函
数地址没什么区别。
不过,此种回调方式比传统回调函数要高明许多。首先,它把让人不太舒服
的回调函数变成一种自然而然的处理例程,使编程者顿觉气顺。再者,地址是一
个危险的东西,用好了可使程序加速,用不好处处是陷阱,程序随时都会崩溃。
现代编程方式总是想法把地址隐藏起来(隐藏比较彻底的如 VB 和 Java),其代
价是降低了程序效率。事件例程使编程者无需直接操作地址,但并不会使程序减
速。更妙的是,此一改变,本是有损程序结构之奇技怪巧变成一种崭新设计理念,
不仅免去被人抨击,而且逼得吾等凡人净手更衣,细细研读,仰慕至今。只是偶
然静心思虑,发觉不过一瓶旧酒而已,故引得此番议论,让诸君见笑了。事件驱
动程序设计是围绕着消息基础形成的,发生一个事件,伴随着一大堆的消息。
我理解“回调机制”是window 在执行某个 API 函数的过程中,调用指定的
一个函数。我们可以模拟一下:
假设 ms 提供一个函数叫做 EnumFont,该函数是得到所有的字体,假设它的
实现是
EnumFont()
{