用SDK玩转ActiveX
2006-04-11 22:54:07 来源:WEB开发网核心提示: 这里我有两点需要说明,第一,用SDK玩转ActiveX(5),事实上对COM接口的调用需要非常严谨地判断每个方法返回值的成功与否,而在这里出于篇幅考虑我便将其一概略去,就没有那么简单了,我们必须从COM最底层的机制入手,你可以在配套源代码中看到这些容错处理;第二,在使用Agent控件之前必
这里我有两点需要说明。第一,事实上对COM接口的调用需要非常严谨地判断每个方法返回值的成功与否,而在这里出于篇幅考虑我便将其一概略去,你可以在配套源代码中看到这些容错处理;第二,在使用Agent控件之前必须将它的Connected状态置为真(-1)——也就是pAgent->put_Connected的一句,否则以下的方法都会失败,而在MFC的封装下倒可以略去这一句,可能MFC有个自动连接的过程。
到现在为止,你应该已经可以把这个助手显示在屏幕上了,运行看看效果吧。
连接点
可能你注意到了,在WM_INITDIALOG的最后一句,我让Agent助手说了一句话:“右键单击我,选择‘隐藏’以结束程序。”但事实上如果你运行这段代码的话,你在助手身上右击鼠标并选择“隐藏”,助手虽然隐藏了起来,程序却并没有退出,这是怎么回事呢?答案是显而易见的——我并没有处理Agent控件的Hide(隐藏)事件。
那么,又如何处理这个事件呢?——在MFC中,ActiveX控件的事件是通过一张宏映射表来实现的,类似下面这个样子:
BEGIN_EVENTSINK_MAP(CActiveXDlg, CDialog)
//{{AFX_EVENTSINK_MAP(CActiveX)
ON_EVENT(CActiveXDlg, IDC_AGENT, 7 /* Hide */, OnHideAgent, VTS_BSTR VTS_I2)
//}}AFX_EVENTSINK_MAP
END_EVENTSINK_MAP()
对于SDK来说,就没有那么简单了。我们必须从COM最底层的机制入手,也就是连接点。
更多精彩
赞助商链接