浏览器的定制与扩展
2006-07-22 22:56:33 来源:WEB开发网下用具体示例来说明怎样实现脚本扩展
示例会在网页上点击一个按钮而使整个窗口发生抖动
从CLhpHtmlView派生一个类CDemoView,在类中实现IDispatch, 并通过IDispatch暴露方法WobbleWnd ---------------------------------------------------------------------------
这里我要介绍一下DISP_FUNCTION宏,它的作用是将一个函数映射到Dispatch映射表中,我们看
文件 DemoView.h
---------------------------------------------------------------------------
.......
class CDemoView : public CLhpHtmlView
{
......
DECLARE_DISPATCH_MAP() // 构建dispatch映射表以暴露方法或属性
......
void WobbleWnd();// 抖动窗口
};
---------------------------------------------------------------------------
文件 DemoView.cpp
---------------------------------------------------------------------------
......
// 把成员函数映射到Dispatch映射表中,暴露方法给脚本
BEGIN_DISPATCH_MAP(CDemoView, CLhpHtmlView)
DISP_FUNCTION(CDemoView, "WobbleWnd", WobbleWnd, VT_EMPTY, VTS_NONE)
END_DISPATCH_MAP()
......
void CDemoView::WobbleWnd()
{
// 在这里实现抖动窗口
......
}
---------------------------------------------------------------------------
文件 Demo.htm
---------------------------------------------------------------------------
...... onclick="external.WobbleWnd()" ...... DISP_FUNCTION(CDemoView, "WobbleWnd", WobbleWnd, VT_EMPTY, VTS_NONE)
CDemoView是宿主类名, "WobbleWnd"是暴露给外面的名字(脚本调用时使用的名字), VT_EMPTY是返回值得类型为空,VTS_NONE说明此方法没有参数,如果要映射的函数有返回值和参数该 如何映射,通过下面举例来说明
更多精彩
赞助商链接