- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
使用ATL开发ActiveX控件.docx
首先说明当前文档是转载:
原文地址: /chinadhf/archive/2010/09/03/1817336.html
本文描述了使用ATL开发一个ActiveX控件的完整过程。
一、创建项目
单击起始页中的“New Project…”,选择“ATL”分类下的“ATL Project”项目,项目名称为“Calculator”。在随后出现的项目向导中,使用默认配置即可。
二、添加控件
在解决方案管理器中的项目上右击,依次选择“Add”、“Class”,在添加类对话框中选择ATL分类下的ATL Control类型。单击“Add”按钮,将会出现添加ATL Control向导。
?
在向导的第二步中,将接口类型选择为“Dual”,为控件支持事件做为准备,在Support选项中,选中“Connection points”复选框。
随后出现选择控件要实现的接口的界面,除VS默认添加的实现外,再添加IObjectSafety接口,实现该接口可以避免控件在IE中使用时IE弹出运行的脚本不安全的提示。
?
?
三、为控件添加并实现方法
在Class View窗口中右击ICalc接口,依次选择“Add”、“Add Method…”,此处假定我们实现一个加法运算,将方法命名为“Add”,然后添加参数:
需要注意的是对返回值的处理。应将参数类型选定为DOUBLE*,并选中“retval”复选框。
向导结束后,VS自动在Calc.cpp中添加了该方法的空实现,略加修改后的方法代码为:
STDMETHODIMP CCalc::Add(DOUBLE a, DOUBLE b, DOUBLE* result)
{
*result = a + b;
return S_OK;
}
测试该方法:
由于只是调用该控件进行加法运算,并不需要该控件的界面展示,因此在测试控件之前,可以将VS自动生成的OnDraw方法中的其他代码删除,直接返回 S_OK 即可。
对VS自动生成的用于测试的htm略做修改来测试添加的方法。修改后的完整htm代码如下:
HTML
HEAD
TITLEATL 8.0 test page for object Calc/TITLE
/HEAD
BODY
OBJECT ID=Calc CLASSID=CLSID:59443E6F-7B99-4F75-A7AF-6FEE5B8208CD/OBJECT
input type=button value=Add onclick=add(); /
script type=text/javascript
function add() {
var calc = document.getElementById(Calc);
var result = calc.Add(2, 3);
alert(result);
}
/script
/BODY
/HTML
点击“Add”按钮后的运行效果:
四、为控件添加事件
假定控件进行的是一个非常复杂的运算,为了在调用运算时不阻塞调用者线程,可以使用异步方式完成运算。控件在完成运算时需要通知调用者,这时便需要事件。
首先按照步骤三中的方法,添加一个异步调用加法运算的方法AddAsync,然后为控件添加运算完成的事件AddCompleted。
在Class View窗口中右击_ICalcEvents接口,依次选择“Add”、“Add Method…”,根据添加方法向导添加AddCompleted方法,如下图所示:
然后在Class View窗口中右击CCalc类,依次选择“Add”、“Add Connection Point…”,在弹出的实现连接点窗口中实现_ICalcEvents接口。
?
完成向导后,VS会自动为我们生成基本框架,包括引发事件的方法Fire_AddCompleted。我们只需在AddAsync方法中添加运算并在运算结束时调用Fire_AddCompleted的代码:
STDMETHODIMP CCalc::AddAsync(DOUBLE a, DOUBLE b)
{
double result;
result = a + b;
Fire_AddCompleted(result);
return S_OK;
}
在网页中添加异步计算的代码进行测试(添加的javascript代码如下),应该能够得到我们想要的效果。
script type=text/javascript
function addAsync() {
var calc = document.getElementById(Calc);
calc.attachEvent(AddCompleted
您可能关注的文档
- 住宅新风让您健康呼吸.doc
- 住宅用家屋证明申请书(増筑).doc
- 住宅装饰工程合同(付款方式为四次).doc
- 住房公积金贷款管理风险和规避方式.doc
- 住院病人血糖管理.ppt
- 体检可早期发现淋巴癌.doc
- 体罚学生故意伤害案.doc
- 体育课程合格评估指标体系(定稿).doc
- 体质健康监测和视力监测结果公告.doc
- 何时能做到乡村教师待遇优于城市教师.doc
- 工会代表大会运行规则及十大制度解读.docx
- 法院合同法案例分析与学习笔记.docx
- 医疗急救口头医嘱管理流程制度.docx
- 幼儿园科学实验教学设计案例.docx
- 2025秋九年级英语全册Unit2Ithinkthatmooncakesaredelicious课时3SectionAGrammarFocus_4c习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit5WhataretheshirtsmadeofSectionA合作探究二课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit2Ithinkthatmooncakesaredelicious课时4SectionB1a_1d习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit1Howcanwebecomegoodlearners课时3SectionAGrammarFocus_4c习题课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit5Whataretheshirtsmadeof课时4SectionB1a_1e课件新版人教新目标版.pptx
- 2025秋九年级英语全册Unit3Couldyoupleasetellmewheretherestroomsare课时3SectionAGrammarFocus_4c课件新版人教新目标版.pptx
原创力文档


文档评论(0)