zoukankan      html  css  js  c++  java
  • 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; 源接口表示控件将使用这个接口来发送通知事件,这个接口不是控件本身实现的接口。

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

  • 相关阅读:
    JS操作JSON总结
    jQuery对select操作
    MS SQL GUID
    QT延时方法
    MySQL 实践
    MySQL 入门教程
    asp.net获取URL和IP地址
    C#-foreach与yield
    C#—序列化(Serialize)和反序列化(NonSerialize)
    Newtonsoft.Json序列化和反序列
  • 原文地址:https://www.cnblogs.com/mydomain/p/1914260.html
Copyright © 2011-2022 走看看