开发环境:vs2015
上网找了很多关于这方面的资料进行学习。
终于给我找到几个比较好的文章。
因为知识比较老。一般是接触硬件和底层的人才会去学习。
参考文章:这是两个比较好的文章
ActiveX控件的基本操作方法以及如何在VS2010下使用控件
https://blog.csdn.net/u014028070/article/details/38424611
c++ ActiveX基础1:这个讲了如何提供外部接口调用
https://blog.csdn.net/qq445803843/article/details/45845585
下面演示生成控件,html调用控件的例子
一、创建控件
1.先创建ActiveX项目
到这里不急着敲代码
先了解一下控件项目的架构。
参考:一个别人分享的资源文档。我会在文章最下面分享链接。
找到类视图,分析对应结构。
其中的 CActiveXApp 是我们这个控件的主程序模块,定义了控件的注册
(DllRegisterServer)、删除(DllUnregisterServer)等功能,一般不用动,如有需要我们可以
在其中的 InitInstance 和 ExitInstance 中定义我们自己的初始化和终止操作代码,一般也就是
一些资源的初始化和销毁工作。
Caxtivexdemo1Ctrl 是控件类,我们要做的控件功能基本上就是要在这个类中实现。
需要提一下的是在这个类中重写了父类的 OnDraw 函数,有如下两句代码:
pdc->FillRect(rcBounds,
CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
pdc->Ellipse(rcBounds);
也就是在控件上画了一个椭圆,实际控件开发中可以根据功能需要修改重写这个函数来
绘制控件界面。
CActiveXPropPage 是属性页类,这个类实现了一个在开发时设定控件属性的对话
框。
CActiveXLib 是为客户程序提供本控件的属性、方法以及可能响应的事件的接口的
库节点,在添加控件的这些功能的时候会用得到。
2.创建对外的接口
定义调度映射和事件映射方法,提供给外部调用者使用
右键-添加-添加方法-确定
生成一个对外的接口函数
例子:Start()
会在3个地方添加代码。
1.idl文件
2.ctrl控制类的定义和实现
到这里控件就OK了。
生成项目即可。会生成一个ocx文件。
这里建议大家把注册输出改为否。
后面自己手动注册即可。下面有描述。
事件–映射返回数据
右键添加–事件
正常函数调用
属性返参:
右键–添加–属性
页面调用:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>testAll</title>
<style>
*.button {
height: 50px;
padding-left: 20px;
padding-right: 20px;
}
</style>
</head>
<body>
<div style="position: fixed;top: 20px">
<label for="">结果</label>
<input type="text" id="result" style="width: 600px;">
</div>
<div style="position: fixed; top: 50px">
<div>
<object classid="clsid:C468DFBB-2F32-4CA6-8461-1791A29A4B00" id="ocx" width="0px" height="0px"></object>
</div>
<h3>非阻塞接口</h3>
<div>
<input class="button" type="button" value="test" onclick="onTest()">
</div>
</div>
<!-- 事件处理 -->
<script>
function onTest() {
var resp_str =ocx.start();
result.value = ocx.pOutInfo;
}
</script>
</body>
</html>
二、使用控件–使用html方式调用控件
1.注册控件。
注册方式。我是用bat方式的。比较方便。
%~dp0的意思是当前路径。
注册bat:
cd /d %~dp0
regsvr32 ActiveX.ocx
反注册bat:
cd /d %~dp0
regsvr32 -u ActiveX.ocx
右键管理员模式运行即可成功注册。
2.html调用ocx
html学习网址:
https://www.w3school.com.cn/html/index.asp
代码:
<html>
<head>
<title> TestOCX </title>
</head>
<body>
<object ID= "L" CLASSID= "CLSID:54B420A3-05D9-462D-9AFF-178E63670DB9"
width=300 height=200>
</object>
<script language="javascript" type="text/javascript">
function myTest()
{
L.Start();
}
</script>
<input id="Button1" type="button" value="test" onclick="myTest();" />
</body>
</html>
解释:
需要使用IE浏览器打开。
成功!!!
添加捕捉ActiveX控件的事件数据
1.右键类视图里的控制类–添加事件
添加后会在2个地方添加代码:
然后生成控件后使用html
html添加代码:
<!-- 事件处理 函数名就是你定义的事件名 -->
<script type="text/javascript" for="L" event="OnDo(data)">
L.value = data;
alert(data);
</script>
成功捕捉事件数据!!!
三、使用控件–使用MFC方式调用控件
1.到Dialog右键插入已经注册好的控件
2.右键控件处添加变量
添加变量后即可调用你的控件内的接口!!!
如果要去掉提示弹窗:
参考下面文章:
去掉弹窗
1.遇到窗口下弹窗
https://zhidao.baidu.com/question/252382360.html
2.提示弹窗
https://zhidao.baidu.com/question/304928075497826844.html
基于MFC的ActiveX控件开发.pdf
链接:https://pan.baidu.com/s/17kilQgwdRtAt3PHrJgDrCg
提取码:bhnr
修改时间:2021-06-07