ActiveX控件包含另一个ActiveX控件时的事件处理问题
是这样的,我有一个控件A,它的主类是ClassA,它要包含控件B,对应的类是ClassB,同时又想把控件B的事件全部放到控件A的一个单独的进程中处理,
所以创建了类ClassC,ClassC有一个专门的进程,准备用ClassC来处理控件B的事件,调用控件B的方法。
ClassB的基类是CWnd,所以ClassC的基类我也定义为CWnd。
查了些资料,处理控件的事件,要使用ON_EVENT宏,其参数格式为
ON_EVENT(theClass, id, dispid, pfnHandler, vtsParams )
其中,第二个参数id让我比较郁闷,因为控件A和控件B都没有界面,对于有界面的程序很简单,就是对话框上加入控件后,控件的资源ID,但是没界面的就……
又查了资料,没有界面的话,就使用Create函数来生成控件并指定资源ID。
virtual BOOL Create(LPCTSTR lpszClassName,LPCTSTR lpszWindowName,DWORD dwStyle,const RECT & rect,CWnd* pParentWnd,UINT nID,CCreateContext * pContext=NULL);
于是在ClassA定义了一个类型为ClassC的成员变量m_ClassC,然后使用
m_ClassC.Create(NULL, NULL, WS_CHILD, CRECT(0,0,0,0), this, IDC_CLASSC_CTRL);
Create成功。然后故技重施,在ClassC中定义了一个类型为ClassB的成员变量m_ClassB,再在ClassC的函数中使用
m_ClassB.Create(NULL, NULL, WS_CHILD, CRECT(0,0,0,0), this, IDC_CLASSB_CTRL);
程序执行到这一句却发生了异常。观察发现 this 指针(因为m_ClassB是ClassC的成员变量,所以这个this是指向ClassC的)中的 m_hWnd 为 0,
但是m_ClassC已经Create过了啊,为什么 m_hWnd 还是零呢?
求各位ActiveX大佬帮忙啊!!!
如果有更简单的无界面ActiveX控件包含另一个无界面的ActiveX控件的事件处理方法也望告知!