13、ActiveX控件

基本概念:

    可以把ActiveX控件看做是一个极小的服务器应用程序,它不能独立运行,必须嵌入到容器程序中,与容器一起运行。容器应用程序是可以嵌入或链接对象的 应用程序;服务器应用程序是创建对象并且当对象被双击时,可以被启动的应用程序。如Word中嵌入Excel,则Word就是一个容器应用程序,而 Excel就是服务器应用程序。

    ActiveX控件的后缀名可以是[.ocx][.dll]等。作为一个典型的ActiveX控件,它具有方法,属性,事件这三种特性。ActiveX底层是通过COM技术实现的。

    BEGIN_DISPATCH_MAP,调度/派遣映射是MFC提供的一种映射机制,主要是为了让外部应用可以方便的访问控件的属性和方法,而事件映射也是MFC提供,让控件可以向包含它的容器发送事件通知的映射机制。

    接口是控件与外部程序进行通信的协议,可以把接口看作是函数的集合,外部程序通过这个接口暴露出来的方法和属性与之通信。实际上,就是抽象基类,在此接口中定义的所有函数都是纯虚函数,实现在派生类完成。ActiveX控件在使用前要先注册。

程序细节:

代码
    
      
void CClockTestCtrl::OnDraw(
CDC
* pdc, const CRect & rcBounds, const CRect & rcInvalid)
{
if ( ! pdc)
return ;
// TODO: 用您自己的绘图代码替换下面的代码。
// pdc->FillRect(rcBounds, CBrush::FromHandle((HBRUSH)GetStockObject(WHITE_BRUSH)));
// pdc->Ellipse(rcBounds);
CBrush brush(TranslateColor(GetBackColor()));
pdc
-> FillRect(rcBounds, & brush);
pdc
-> SetTextColor(TranslateColor(GetForeColor()));
CTime time
= CTime::GetCurrentTime();
CString str
= time.Format( " %H:%M:%S " );
pdc
-> TextOut( 0 , 0 , str);
}

两个函数来使控件窗口重绘:

Invalidate

InvalidateControl

添加属性页:PROPPAGEID(CLSID_CColorPropPage)

BoundPropertyChanged

Call this function to signal that the bound property value has changed

    可以在此函数中为每一个具有持久性的自定义属性调用以"PX_"开头的函数,MFC为一些基本类型都提供了PX_开头的函数,如PX_Short,PX_Long。

AmbientUserMode,Call this function to determine if the container is in design mode or user mode.

[default, source] dispinterface _DClockTestEvents; 源接口表示控件将使用这个接口来发送通知事件,这个接口不是控件本身实现的接口。

对属性和方法都是通过相应的函数实现。

你可能感兴趣的:(ActiveX)