网站首页

家园论坛

老版论坛

家园博客

业界新闻

技术文档

下载中心

速查中心

图片中心

硬件资讯
上一篇:没有了 下一篇:VC++中用通讯控件开发串行通信程序
运用MFC来实现ActiveX控件的方法

来源: 作者: 添加日期:2005-9-4 19:19:56 点击次数:

1.何谓ActiveX? 
简言之,Active X是一种允许程序(即ActiveX控件)在网络(如Internet)
上与其它程序交互通信的体系结构。这种体系结构均使用微软公司的组件
对象模型(COM)和分布式组件对象模型(DCOM)标准。其中,COM允许不
同的应用程序实现本地相互交谈,而DCOM提供在网络上的(应用程序间)
通信。

2.使用MFC创建ActiveX控件
VC++ 5.0提供了MFC ActiveX Control Wizard来生成ActiveX控件的框
架文件,并使用Class Wizard来定义控件的属性、方法和事件。同时,在
MFC类库中,还为开发ActiveX控件提供了强有力的COLeControl类。由
于COLeControl类是从CWnd类派生的,因此ActiveX控件具有Windows
窗口对象所具有的全部功能。下面将介绍如何使用VC++5.0来创建ActiveX
控件的过程。
(1) 创建ActiveX控件工程
A.创建工程存放目录"C:\MyVc";
B.启动VC++ 5.0;
C.选File\New,弹出如图1的对话框;
D.选Projects标签,在工程类型列表中选MFC ActiveX Control Wizard,
将Location框设为C:\ MyVc ,将Project Name框设为MyTest,然后选Next,
承认缺省设置,直到选Finish。VC++将显示New Project Information对话框,
点击OK;
E.选Build\Set Active Configuration,VC++将显示Set Active Configuration
对话框,选MyTest-Win32 Debug;点击OK。
以上即完成了名为MyTest的ActiveX控件工程的创建,其工程文件名
的后缀为OCX。
(2) 测试MyTest控件
A.选Build\Build MyTest.OCX,VC++5.0将自动的进行编译、连接
MyTest控件的文件,并创建MyTest.OCX文件。
B.选Tools\ActiveX Control Test Container,VC++5.0将执行Test 
Container程序,测试MyTest控件。

3.使用VC++5.0为ActiveX控件添加事件
ActiveX控件是通过事件来通知容器控件发生事情,如单击控件、用
键盘输入数据等。当这些动作发生时,控件点火(Firing)一个事件并通知容
器。MFC支持两种事件:库存事件(stock event)和定制事件(custom
event)。库存事件是由ColeControl自动处理的事件,而定制事件能识别某
一确定的动作,由用户自行定义。
对于每个控件点火一个事件,控件类必须映射每个控件事件为当事件
发生时要调用的成员函数。还可以用ClassWizard来访问和操纵控件事件的
映射。在控制类的头文件中,事件映射由以下宏定义:
DECLARE_EVENT_MAP( )
一旦声明了事件映射,就必须在实现文件中定义。
(1)添加库存事件
VC++ 5.0可以利用Windows提供的ActiveX控件库,来为用户程序添加
ActiveX控件的库存事件。下面以例程Calculator加以说明。
<1>创建一名为Calculator的MFC AppWizard(exe)工程,IDD_Calculator_
DIALOG对话框的属性表见表1;

对象 属性 属性值

Dialog Box ID IDD_Calculator_DIALOG
Caption MyCalculator 

Calcu Control ID ID_CAL1

Push Button ID IDC_TODAY_BUTTON
Caption To&day

Push Button ID IDC_EXIT_BUTTON
Caption &Exit

表1

<2>登记Calculator ActiveX控件;
A.在VC++5.0中,选Tools\ ActiveX Control Test Container,执行Test 
Container程序;
B.在Test Container程序的主窗口,选File/Register 
Controls,点击Register,确定C:
\WINDOWS\SYSTEM\MSCAL.OCX"路径,再点击Open。
C.弹出Controls Register对话框,从Control File列查对"C:\WINDOWS\ 
SYSTEM\ MSCAL OCX"是否已登记成功;
D.登记成功后,退出Test Container程序。
<3>在MFC Class Wizard中为Calculator引入变量,添加消息,见表2;

Class name Object ID Message

CCalculatorDlg CCalculatorDlg WM_INITDIALOG 

CCalculatorDlg IDC_TODAY_BUTTON BN_CLICKED 

CCalculatorDlg IDC_EXIT_BUTTON BN_CLICKED 

表2
<4>VC++5.0打开CalculatorDlg.cpp,为各变量编写代码。
A.初始化CCalculatorDlg
BOOL CCalculatorDlg::OnInitDialog()
{
Cdialog::OnInitDialog();
。。。
//TODO:Add extra initialization here
//加入我的代码
m_cal.Today( ) ; 
//结束我的代码
//return TRUE;
}
B. Today钮的代码
void CCalculatorDlg::OnTodayButton( )
{
//TODO: Add your control notification handler code here
//加入我的代码
m_cal.Today( ) ; 
//结束我的代码
}
C. Exit钮的代码
void CCalculatorDlg::onExitButton( )
{
//TODO: Add your control notification handler code here
//加入我的代码
OnOK( ): 
//结束我的代码
}
<5>程序运行
在VC++5.0中,选Build\Build Calculator.exe,建立可执行文件;再
选Build\Execute Calculator.exe, 运行程序。
(2)添加定制事件
<1>定制事件的映射宏为EVENT_CUSTOM,并可以使用ClassWizard
添加定制事件,这包括确定事件的外部名和内部名、给事件赋参数以及确
定何时点火事件等。下面以CKeyChoice事件为例加以说明。
向MyTest控件添加CKeyChoice定制事件:
A.选View\ClassWizard,在Active Events标签里将Class Name设
为CmyTestCtrl;
B.点击Add EventExternal,将name设为FireCKeyChoice,VC++5.0
会自动将Internal name设为FireCKeyChoice;
C.选OK,关闭ClassWizard对话框。
<2>测试结果:
A.选Build/Rebuild All,编译、连接Mytest控件的文件;
B.选Tools\ActiveX Control Test Container\Insert OLE Control,
选MyTest Control,点击OK。
C.选File\Exit,退出Test Container。
打开文件MyTestCtrl。Cpp,找到onKeyDown函数,加入触发
CKeyChoice事件的程序代码。 


void CMyTestCtrl::onKeyDown(UNIT nChar,UNIT nRepCnt,UNIT nFlags)
{
//TODO:Add your message handler code here and/or call default
//加入我的代码
char strnChar[10];
char strnRepCnt[10];
char strnFlags[10];
Cstring strKeyPress;
itoa(nChar,strnChar );
itoa(nRepCnt,strnRepCnt);
itoa(nFlags ,strnFlags);
strKeyPress=(Cstring)"You pressed the key:\n"+
"nChar="+ strnChar+"\n"+
"nRepCnt="+ strnRepCnt+"\n"+
"nFlags="+ strnFlags+"\n"+
strKeyPress。MakeUpper();
//以上完成从键盘输入数据
if(strKeyPress= ="PAINT")
system("pbrush。exe");
//若输入"PAINT"(与大小写无关),则Windows的调用"画板"
else if(strKeyPress= ="COMPUTE")
system("calc。exe");
//若输入"COMPUTE"(与大小写无关),则Windows的调用"计算器"
else if(strKeyPress= ="EXIT")
OnOK();
//若输入"EXIT"(与大小写无关),则退出程序
//结束我的代码
FireCKeyChoice;
//点火CKeyChoice事件
//结束我的代码
}
4. 结束语
ActiveX控件是某一程序内自包含的部分或独立的组件。开发人员按照
Active X的技术规范利用多种流行的编程语言,如微软的VC++5.0、Visual 
Basic 5.0和Delphi 3.0等,来编写ActiveX控件。开发人员还能在其它的程
序中(甚至是用其它语言写的程序中)重复使用它们。例如,把用VB写的控件
插在用VC++是写的程序中。
这种重复使用和自包含的本质来自于微软公司更早的面向对象应用程序
研究,即对象链接和嵌入(OLE)标准。ActiveX是从OLE发展而来的,实际上,
ActiveX对象基本上就是OLE对象,唯一不同的是ActiveX增加了WWW上工
作的功能。因此,ActiveX在继承OLE优势的同时,还增添了强有力的网上
支持能力,能帮助开发人员以最短的时间和最少的投入来编制软件,是一种
很有发展前途的Web新技术。

 
设为首页 | 加入收藏 | 业务办理 | 友情链接 | 论坛版面 | 浙ICP备07502118号 |