第18课 ActiveX 编程(下面 X均为ActiveX简称)

ActiveX控件不能独立运行,必须嵌入到某个容器程序中,与该容器一起运行。

ActiveX有方法,属性和事件三种特性。

ActiveX控件的窗口类中提供了 消息映射 调度映射和事件映射。
调度映射是MFC提供的一种映射机制,主要是为了让外部程序可以方便的访问空间的属性和方法。
事件映射也是MFC提供的一种映射机制,让控件可以向包含它的容器发送事件通知。

接口是控件与外部程序进行通信的协议。

一. VB  中调用X控件,添加方法 project->Add components。另外可以用Object Browser来查看控件

二. VC  中创建X控件
  1. 新建一个 X  工程名为 Clock,注意一个文件中可以包含多个控件。
  2. 保持缺省设置,完成。注意它生成的三个类,以及相关的接口。
  3. 运行它。选择 TSTCON32.exe 作为容器。
  4. 选择 Insert Control,  此时我们可以看到,它画了一个椭圆。也可以在 VB中测试。
  5. 删除注册信息。用 regsvr32 /u + 文件名。也可以在菜单选择反注册命令。
  6. 重写代码。在 CClockCtrl::OnDraw() 中画了一个椭圆,此时我们在其中得到系统时间,并显示它。为此我们在  OnCreate()设置了一个定时器,每隔一定时间发出一个 Invalidate()消息,使窗口重绘。
  7. 如何改变控件的背景色和前景色?  ClassWizard->AutoMation->Add Property->BackColor,还需要在 OnDraw()中加上相应的代码
   CBrush brush(TranslateColor(GetBackColor()));
 pdc->FillRect(rcBounds, &brush);
 pdc->SetBkMode(TRANSPARENT);
 pdc->SetTextColor(TranslateColor(GetForeColor()));
  8. 增加属性页。在
  BEGIN_PROPPAGEIDS(CClockCtrl, 2)  此时数目也得改成相应的数目
 PROPPAGEID(CClockPropPage::guid)
 PROPPAGEID(CLSID_CColorPropPage)
  END_PROPPAGEIDS(CClockCtrl)  OK~
  9. 增加自定义属性: ClassWizard->AutoMation->Add Property 加上一个变量 m_interval, 类型为  short,对应外部变量为Interval。在 CClockCtrl中增加OnIntervalChanged 方法。添加如下代码:
   if(m_interval<0 || m_interval>6000)
 {
  m_interval=1000;
 }
 else
 {
  m_interval=m_interval/1000*1000;
  KillTimer(1);
  SetTimer(1,m_interval,NULL);
  BoundPropertyChanged(0x1);
 }
   10.  测试:Control->Invoke Methods
   11.  将时间间隔加到属性页中,在资源视图中加入一文本框和编辑框。为 EditBox关联成员变量,加入属性 interval
   12.  增加方法: ClassWizard->AutoMation->Add Method->Hello 加入代码 OK!在VB 中可以调用此方法!
   void CClockCtrl::Hello()
{
 // TOD Add your dispatch handler code here
 MessageBox("Hello world!");
}
   13.  增加事件 :ClassWizard->AutoMation->Add Events->Click
   14.  增加自定义事件: ClassWizard->AutoMation->Add Events->NewMinute
       在新的一分钟到达时发出这个通知,在 OnDraw()中写代码:
       CTime time=CTime::GetCurrentTime();
 if(0==time.GetSecond())
 {
  FireNewMinute();
 }
   15.  Interval属性具有持久性。在 CClockCtrl::DoPropExchange()中调用PX_short() 方法,OK
    PX_Short(pPX,"Interval",m_interval,1000);
   16.  Property Page Property属性中的interval 保持一致的方法:在 OnIntervalChanged()中调用BoundPropertyChanged(0x1);
   17.  希望控件在设计时间内不走动的方法:在 OnTimer()中, if(AmbientUserMode())InvalidateControl();巧妙!

三. VC  中调用X控件
  1. 新建 ClockTest  对话框应用程序
  2. 点击右键 ->  插入X控件 ->时钟控件
  3.Project->Add Component  会生成CClock类。
  4. CCLockTestDlg  中增加CClock类的成员变量 m_clock,然后可以动态创建一个这样的东东!
  5. 试验 Click(),NewMinute(),SetBkColor(),SetForeColor()  方法和属性
  6. 如何为动态创建的控件做事件响应呢?首先你得知道它的  ID号,然后参考非动态的控件事件代码,呵。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值