关于ocx事件的
关于ocx事件的求助
我在写一个ocx控件。在控件内有一个自定义的类,处理逻辑相关的事件,比如MyClass.h和MyClass.cpp,当有人call我时,我就能在MyClass的线程内得到信息,现在我要通知给使用我这个ocx的用户,告诉用户有人call你。我是想添加个OnRing事件,只要用户在使用ocx时响应这个OnRing事件,就知道有没有人call他。问题是:ocx添加事件OnRing会自动添加到CxxxCtrl这个控件类内,我在MyClass内知道有人call了,我怎么去调CxxxCtrl内的OnRing?
------解决方案--------------------
你的类为什么不能调用CxxxCtrl的方法,都在一个工程中。
------解决方案--------------------
用回调函数试试
------解决方案--------------------
你描述的很绕!
就是你的标题,“事件”,然后在你需要的地方调用你Fire
------解决方案--------------------
回调函数
------解决方案--------------------
看下孙鑫的讲座就知道了。
------解决方案--------------------
他那本书上讲到的都是很基础的。都是直接在CxxxxCtrl内使用的。
------解决方案--------------------
我的类里封装了CxxxCtrl要导出的接口,具体的实现都在我的类里,比如CxxxCtrl导出的Call方法,是在里面直接调用了我的类的Call方法。Call的具体实现 是在我的类里实现的。
CxxxCtrl里面有我的类的一个实例。
MyClass
{
void Call(LPCTSTR strDestURL, USHORT nVideoNum);
OnRing();
}
//CxxxCtrl
CxxxCtrl
{
CMyClass m_myClass;
LONG Call(LPCTSTR strDestURL, USHORT nVideoNum);
void OnRing(void)
{
FireEvent(eventidOnRing, EVENT_PARAM(VTS_NONE));
}
}
LONG CxxxCtrl::Call(LPCTSTR strDestURL, USHORT nVideoNum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
m_myClass.Call(strDestURL, nVideoNum);
return 0;
}
现在OnRing了,我要通知ocx的用户,我就要调用CxxxCtrl的OnRing,直接调用是不行的,通过回调用是一种方法,我现在想问的是有没有ocx支持的更方便的方法?
------解决方案--------------------
你在标题里边已经说到事件了,那就直接增加一个自定义事件不就可以了?
------解决方案--------------------
OnRing就是自定义事件了,ocx用户调用了Call后,CMyClass的OnRing回收到通知,这时我要通知给ocx用户. 问题是怎么在CMyClass内调用CxxxCtrl的OnRing. 使用回调,是我现在能想到的方法,我现在想知道的是OCX是否支持更方便的方法
------解决方案--------------------
CMyClass不是控件里边的吗?是CxxxCtrl的子类吧?
------解决方案--------------------
不是,CxxxCtrl是使用ocx自动生成的类,在CxxxCtrl类里面有CMyClass的一个实例,CxxxCtrl要调用
CMyClass的方法。
------解决方案--------------------
CMyClass也是在ocx内部的。
------解决方案--------------------
CxxxCtrl的指针传递给 CMyClass不就行了嘛~
最差也可以用全局变量传递啊!
------解决方案--------------------
我在写一个ocx控件。在控件内有一个自定义的类,处理逻辑相关的事件,比如MyClass.h和MyClass.cpp,当有人call我时,我就能在MyClass的线程内得到信息,现在我要通知给使用我这个ocx的用户,告诉用户有人call你。我是想添加个OnRing事件,只要用户在使用ocx时响应这个OnRing事件,就知道有没有人call他。问题是:ocx添加事件OnRing会自动添加到CxxxCtrl这个控件类内,我在MyClass内知道有人call了,我怎么去调CxxxCtrl内的OnRing?
------解决方案--------------------
你的类为什么不能调用CxxxCtrl的方法,都在一个工程中。
------解决方案--------------------
用回调函数试试
------解决方案--------------------
你描述的很绕!
就是你的标题,“事件”,然后在你需要的地方调用你Fire
------解决方案--------------------
回调函数
------解决方案--------------------
看下孙鑫的讲座就知道了。
------解决方案--------------------
他那本书上讲到的都是很基础的。都是直接在CxxxxCtrl内使用的。
------解决方案--------------------
我的类里封装了CxxxCtrl要导出的接口,具体的实现都在我的类里,比如CxxxCtrl导出的Call方法,是在里面直接调用了我的类的Call方法。Call的具体实现 是在我的类里实现的。
CxxxCtrl里面有我的类的一个实例。
MyClass
{
void Call(LPCTSTR strDestURL, USHORT nVideoNum);
OnRing();
}
//CxxxCtrl
CxxxCtrl
{
CMyClass m_myClass;
LONG Call(LPCTSTR strDestURL, USHORT nVideoNum);
void OnRing(void)
{
FireEvent(eventidOnRing, EVENT_PARAM(VTS_NONE));
}
}
LONG CxxxCtrl::Call(LPCTSTR strDestURL, USHORT nVideoNum)
{
AFX_MANAGE_STATE(AfxGetStaticModuleState());
// TODO: 在此添加调度处理程序代码
m_myClass.Call(strDestURL, nVideoNum);
return 0;
}
现在OnRing了,我要通知ocx的用户,我就要调用CxxxCtrl的OnRing,直接调用是不行的,通过回调用是一种方法,我现在想问的是有没有ocx支持的更方便的方法?
------解决方案--------------------
你在标题里边已经说到事件了,那就直接增加一个自定义事件不就可以了?
------解决方案--------------------
OnRing就是自定义事件了,ocx用户调用了Call后,CMyClass的OnRing回收到通知,这时我要通知给ocx用户. 问题是怎么在CMyClass内调用CxxxCtrl的OnRing. 使用回调,是我现在能想到的方法,我现在想知道的是OCX是否支持更方便的方法
------解决方案--------------------
CMyClass不是控件里边的吗?是CxxxCtrl的子类吧?
------解决方案--------------------
不是,CxxxCtrl是使用ocx自动生成的类,在CxxxCtrl类里面有CMyClass的一个实例,CxxxCtrl要调用
CMyClass的方法。
------解决方案--------------------
CMyClass也是在ocx内部的。
------解决方案--------------------
CxxxCtrl的指针传递给 CMyClass不就行了嘛~
最差也可以用全局变量传递啊!
------解决方案--------------------