作者:
杨老师
一、前言
我的 COM 组件运行时产生一个窗口,当用户双击该窗口的时候,我需要通知调用者;
我的 COM 组件用线程方式下载网络上的一个文件,当我完成任务后,需要通知调用者;
我的 COM 组件完成一个钟表的功能,当预定时间到达的时候,我需要通知调用者;
... ... ... ...
本回书开始话说 COM 的事件、通知、连接点......这些内容比较多,我分两次(共四回)来介绍。
二、通知的方法
当程序甲方内部发生了某个事件的时候,需要通知乙方,无非使用几个方法:
通知方式 | 简单说明 | 评论 | |
直接消息 | PostMessage() PostThreadMessage() |
向窗口或线程发个消息 | 你什么时候执行我就不管啦 |
SendMessage() | 马上执行消息响应函数 | 不执行完消息处理函数不会返回 | |
SendMessage(WM_COPYDATA...) | 发消息的同时,还可以带过去一些自定义的数据 | 比较常用,所以单独列了出来 | |
间接消息 | InvalidateRect() SetTimer() ...... |
被调用的函数会发送相关的一些消息 | 这样的函数太多了 |
回调函数 | GetOpenFileName()...... | 当用户改变文件选择的时候,执行回调函数 | 嗨!哥们,这是我的电话,有事就言语一声。 |
在 COM 的时代,以上这些方法就基本上不能玩转了,因为...您想呀 COM 组件是运行在分布式环境中的,地球另一边计算机上运行的组件,怎么可能给你的窗口发消息那?当然不能!(但话又说回来,对于 ActiveX 这样只能在本地运行的组件,当然也可以发送窗口消息的啦。)
回调函数的方式,是设计 COM 通知方法的基础。回调函数,本质上是预先把某一函数的指针告诉我,当我有必要的时候,就直接呼叫该函数了&#