用 VC++ 2005 建立ActiveX
2012-06-05 00:02
246 查看
首先选择新建项目,选择Visual C++ MFC -> MFC ActiveX 控件
![](http://www.cppblog.com/images/cppblog_com/polarstars/1.JPG)
输入项目名称,本例子我们起名为 FActiveX,点击确定。
![](http://www.cppblog.com/images/cppblog_com/polarstars/2.JPG)
在控件设置中 仅选中运行时不可见,然后选择完成。
到此一个完整的ActiveX框架就已经搭成了,VC2005为我们生成了所有必须的文件,现在你就可以编译一下了,应该没有任何的错误和警告,否则就可能是你的开发环境有问题了。
在工程目录里的Debug子目录下已经生成了FAvtiveX.ocx的文件,说明我们已经成功生成控件了,只不过这个控件没有任何功能和接口。
下面我们就逐个添加控件的2个要素:事件、方法;
![](http://www.cppblog.com/images/cppblog_com/polarstars/3.JPG)
在类视图中选中 CFActiveXCtrl类,点击右键选择 添加->添加事件
![](http://www.cppblog.com/images/cppblog_com/polarstars/4.JPG)
在添加事件向导里,填写事件名称RecvData,参数类型 BSTR,参数名strData,
按添加将参数名添加到参数列表。
点击完成,事件就添加完了.
那方法该如何添加呢?
![](http://www.cppblog.com/images/cppblog_com/polarstars/5.JPG)
在类视图 ->接口->FAvtiveXlib->接口->_DFAvtiveX上点击右键选择 添加->添加方法
在添加方法向导中,返回类型选择void,方法名Show,参数类型BSTR,参数名strMsg,
选择完成,至此方法就添加完成了。
打开 FAvtiveXCtrl.cpp文件,在Show程序里添加如下测试代码
RecvData(strMsg);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CFAvtiveXCtrl::Show(LPCTSTR strMsg)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AFX_MANAGE_STATE(AfxGetStaticModuleState());
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// TODO: 在此添加调度处理程序代码
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
RecvData(strMsg);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
现在我们来重新生成解决方案,应该没有任何错误和警告产生。
至此我们的第一个控件大功告成,现在就让我们来测试一下。
首先新建一个HTM文件,内容如下:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
"http://www.w3.org/TR/html4/loose.dtd">
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<html>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<head>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<title>ActiveX测试</title>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</head>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<object id="MYAvtiveX" classid="clsid:42BB26D9-323D-4E06-A2B3-D04CF3C4C074" > </object>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<body>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<input type='button' onclick='MYAvtiveX.Show("Hello World!")' value='Click'>
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
<script language='javascript' for='MYAvtiveX' event='RecvData(Message)'>
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
alert("响应ActiveX触发的事件成功:"+Message);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</script>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</body>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</html>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
其中的classid="clsid:42BB26D9-323D-4E06-A2B3-D04CF3C4C074"代表我们刚刚生成的控件clsid可从FAvtiveX.idl文件中查到:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
// CFAvtiveXCtrl 的类信息
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
[ uuid(42BB26D9-323D-4E06-A2B3-D04CF3C4C074),
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
helpstring("FAvtiveX Control"), control ]
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
coclass FAvtiveX
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
[default] dispinterface _DFAvtiveX;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
[default, source] dispinterface _DFAvtiveXEvents;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
};
保存HTM文件,用IE打开,IE会提示“已限制此网页运行可以访问计算机的脚本或ActiveX控件”,请单击选择允许阻止的内容,在弹出的安全警告窗口选择“是”,然后你就可以点击我们刚刚创建的按钮,IE会问你想不想交互之类的话,你选择“是”即可看到如下窗口弹出:
![](http://www.cppblog.com/images/cppblog_com/polarstars/7.JPG)
说明我们的控件运行正常。
输入项目名称,本例子我们起名为 FActiveX,点击确定。
在控件设置中 仅选中运行时不可见,然后选择完成。
到此一个完整的ActiveX框架就已经搭成了,VC2005为我们生成了所有必须的文件,现在你就可以编译一下了,应该没有任何的错误和警告,否则就可能是你的开发环境有问题了。
在工程目录里的Debug子目录下已经生成了FAvtiveX.ocx的文件,说明我们已经成功生成控件了,只不过这个控件没有任何功能和接口。
下面我们就逐个添加控件的2个要素:事件、方法;
在类视图中选中 CFActiveXCtrl类,点击右键选择 添加->添加事件
在添加事件向导里,填写事件名称RecvData,参数类型 BSTR,参数名strData,
按添加将参数名添加到参数列表。
点击完成,事件就添加完了.
那方法该如何添加呢?
在类视图 ->接口->FAvtiveXlib->接口->_DFAvtiveX上点击右键选择 添加->添加方法
在添加方法向导中,返回类型选择void,方法名Show,参数类型BSTR,参数名strMsg,
选择完成,至此方法就添加完成了。
打开 FAvtiveXCtrl.cpp文件,在Show程序里添加如下测试代码
RecvData(strMsg);
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
void CFAvtiveXCtrl::Show(LPCTSTR strMsg)
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
AFX_MANAGE_STATE(AfxGetStaticModuleState());
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
// TODO: 在此添加调度处理程序代码
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
RecvData(strMsg);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
}
现在我们来重新生成解决方案,应该没有任何错误和警告产生。
至此我们的第一个控件大功告成,现在就让我们来测试一下。
首先新建一个HTM文件,内容如下:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
"http://www.w3.org/TR/html4/loose.dtd">
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<html>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<head>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<title>ActiveX测试</title>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</head>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<object id="MYAvtiveX" classid="clsid:42BB26D9-323D-4E06-A2B3-D04CF3C4C074" > </object>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<body>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
<input type='button' onclick='MYAvtiveX.Show("Hello World!")' value='Click'>
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
<script language='javascript' for='MYAvtiveX' event='RecvData(Message)'>
![](http://www.cppblog.com/Images/dot.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
alert("响应ActiveX触发的事件成功:"+Message);
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</script>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</body>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
</html>
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
其中的classid="clsid:42BB26D9-323D-4E06-A2B3-D04CF3C4C074"代表我们刚刚生成的控件clsid可从FAvtiveX.idl文件中查到:
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
// CFAvtiveXCtrl 的类信息
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
[ uuid(42BB26D9-323D-4E06-A2B3-D04CF3C4C074),
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
helpstring("FAvtiveX Control"), control ]
![](http://www.cppblog.com/Images/OutliningIndicators/None.gif)
coclass FAvtiveX
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](http://www.cppblog.com/Images/OutliningIndicators/ContractedBlock.gif)
![](http://www.cppblog.com/Images/dot.gif)
{
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
[default] dispinterface _DFAvtiveX;
![](http://www.cppblog.com/Images/OutliningIndicators/InBlock.gif)
[default, source] dispinterface _DFAvtiveXEvents;
![](http://www.cppblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
};
保存HTM文件,用IE打开,IE会提示“已限制此网页运行可以访问计算机的脚本或ActiveX控件”,请单击选择允许阻止的内容,在弹出的安全警告窗口选择“是”,然后你就可以点击我们刚刚创建的按钮,IE会问你想不想交互之类的话,你选择“是”即可看到如下窗口弹出:
说明我们的控件运行正常。
相关文章推荐
- 用 VC++ 2005 建立ActiveX 分步走
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- [转]VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- vc++建立web中ActiveX插件的过程
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- vc2005无法建立智能项目解决方法
- VC2005从开发MFC ActiveX ocx控件到发布到.net网站的全部过程
- vc2010的ActiveX开发ocx,控件内引入对话框,对话框上的按钮响应建立过程(一)