描述:
====假设我现在要实现一下功能:在控件中点击鼠标左键fire一事件event1,产生动作X====
1.在activex中添加事件后,有如下代码:
[id(1)] void event1(); //event1 为自定义
2.又有如下内联函数:
void FireEvent1()
{FireEvent(eventidEvent1,EVENT_PARAM(VTS_NONE));}
3.然后消息映射:
void CAct_03Ctrl::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
FireEvent1();
COleControl::OnLButtonDown(nFlags, point);
}
现在的问题是:如何实现动作X,在哪产生,我猜测是上面的event1(),如果是,这个函数应该怎么写,
就是event1函数包含在哪个类中,而且我感觉这种一个message 触发一个event的情况直接用message不是更简单,为什么还要用event,例子都是用Click讲的,到这里有点想不通了,望各位不要笑我,指点一二。
解决方案1:
就是event1函数包含在哪个类中,而且我感觉这种一个message 触发一个event的情况直接用message不是更简单,为什么还要用event,例子都是用Click讲的,到这里有点想不通了,望各位不要笑我,指点一二。
这个问题其实就是所谓的“连接点”。
虽然理论上可以通过消息捕获与发送实现你说的,但是那没有什么通用性啊!
比如你写个控件,我来调用,我要处理鼠标双击事件,我确实可以通过api来搞定,但是那就太麻烦了,乃至搞不好我就不用你的控件了。
在COM概念里,组件实现者就是COM服务器,组件使用者就是客户端,不要跟网络通信的C/S混淆。
消息是服务于线程和窗口的,事件(这里指的应该是连接点)是COM中的专用概念,说白了就是回调通知,但是不同于普通的回调函数,而是指回调接口。