简单OCX控件的开发

简单OCX控件的开发

  1. 新建工作空间
    首先新建一个工作区,作为这个小Demo的文件所在目录
    在这里插入图片描述
    在上图工作空间名称中,填入工作空间名称并点击确定。出现如下界面,工作区名称根据你自己填写的名称而定。
    在这里插入图片描述

  2. 新建工程
    点击新建->工程出现如下界面:
    在这里插入图片描述
    在工程名称中填入你所建立的工程的名字,选择MFC ActiveX ControlWizard 选项,并选择添加到当前工作空间,点击确定

你可以在fireView中看到整个工程的文件目录,我的文件目录如下所示:
在这里插入图片描述
之后你就可以根据你的需要,来开发OCX控件了。
3. 添加方法
如果你需要添加方法,你可以在工作空间中的ClassView中右击如箭头所示部分,添加你的控件中要使用的方法。
在这里插入图片描述
当你右击类视图中_DIDCardReader并点击列表中的Add Method 选项时,会出现如下界面:
在这里插入图片描述
此时,你可以在Externel name中填写函数名(Internal name 会根据你填写的Externel name自动填写),在Return type中选择返回类型,Parameter list中添加你需要的参数,类型可选。填写完成点击OK。
此时在你工程目录的.odl 文件中就会产生一条定义
如图所示:
在这里插入图片描述

前面的id 表示你当前创建的方法的id,后面的内容类似于函数的声明。
此外,函数会在如图所示cpp文件中创建一个函数体

在这里插入图片描述
在这里插入图片描述
4. 添加回调函数
如果你需要添加回调函数,你可以在右击下图所示位置,并在右击菜单选项中点击Add Event。
出现如下界面:
在这里插入图片描述
在Externel name 中填入回调函数名,Internel name 自动填写,在Parameter list里添加参数列表。
和添加方法一样,回调函数也会在.odl 中声明,在.cpp文件中创建函数体。
如下图所示:
在这里插入图片描述
5. 添加之后的文件目录与类视图
在添加完成你需要的函数和方法之后,整体的工程目录会如下所示:
在这里插入图片描述

添加之后的类视图大体如下:
在这里插入图片描述

  1. 添加消息处理函数WindowProc并添加相关代码
    如果你在开发过程中还需要一些其他的函数,比如消息处理等,你可以在
    在类视图界面右击如下图箭头位置并点击 Add Virtual Function 添加虚函数。

在这里插入图片描述
点击之后出现如下界面:

在这里插入图片描述
选择你要使用的函数,这里我选择WindowProc 添加通知函数并点击确定,确认添加。

之后你就可以在.cpp文件中找到相应的函数体,并添加相关代码了。
例如,我在消息通知函数中添加如下示例代码,向窗口抛出一个消息。
在这里插入图片描述
7. 控件注册并获取CLSID
当你的控件开发完成,需要调用时,你可以先编译,之后再.odl中找到uuid,
注意:一般是最后一个,或者你找到和下图类似格式的部分,复制相应的uuid。

在这里插入图片描述
8. 新建HTML并编写JS调用OCX控件
在js调用时,新建一个OBJECT标签,添加classid属性,并把刚才找到的uuid作为它的值。
Js在调用时,先把uuid绑定到一个id下,使之能被该id调用
其中for的值为绑定控件的id, event 是回调函数。
之后你也可以在JavaScript中使用控件的一些函数,也可以通过回调函数来传递参数等。
在这里插入图片描述
调用结果:

在这里插入图片描述
9. 注册安全对象
此外,你还可以在如下箭头所指文件中将控件注册为安全对象,用来去掉每次调用控件弹出的安全提示窗口

在这里插入图片描述
我添加的部分代码如下:
PS: 具体实现方法自己去找吧,网上一大把

// 标记控件初始化安全.
// 创建初始化安全组件种类
HRESULT hr = CreateComponentCategory(CATID_SafeForInitializing,
	L"Controls safely initializable from persistent data!");
if (FAILED(hr))
    return hr;
// 注册初始化安全
hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForInitializing);
if (FAILED(hr))
    return hr;

// 标记控件脚本安全
// 创建脚本安全组件种类 
hr = CreateComponentCategory(CATID_SafeForScripting, L"Controls safely scriptable!");
if (FAILED(hr))
    return hr;
// 注册脚本安全组件种类
hr = RegisterCLSIDInCategory(CLSID_SafeItem, CATID_SafeForScripting);
if (FAILED(hr))
    return hr;
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值