简单OCX控件的开发
-
新建工作空间
首先新建一个工作区,作为这个小Demo的文件所在目录
在上图工作空间名称中,填入工作空间名称并点击确定。出现如下界面,工作区名称根据你自己填写的名称而定。
-
新建工程
点击新建->工程出现如下界面:
在工程名称中填入你所建立的工程的名字,选择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. 添加之后的文件目录与类视图
在添加完成你需要的函数和方法之后,整体的工程目录会如下所示:
添加之后的类视图大体如下:
- 添加消息处理函数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;