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

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

  • 相关阅读:
    10个最好的游戏开发在线资源
    程序员什么时候该考虑辞职
    程序员常去的14个顶级开发社区
    如何成为10倍速的程序员
    (通用)深度学习环境搭建:tensorflow安装教程及常见错误解决
    20行JS代码实现贪吃蛇
    程序员必备工具目录
    发布 Google Chrome插件教程
    高并发思路
    30分钟入门Java
  • 原文地址:https://www.cnblogs.com/mydomain/p/1914260.html
Copyright © 2020-2023  润新知