zoukankan      html  css  js  c++  java
  • VC6编写ActiveX控件全过程

    /*by:rush date:2011年6月22日 20:07:56*/

    /*vc编写Activex控件全过程*/

    最近在自己的项目中使用了ActiveX控件。在这里就不介绍ActiveX控件的相关知识给大家扫盲了,我们直接进入编程。

    1、新建控件工程

    在新建项目时,选择新建ActiveX控件,如下图所示:

    VC++下的ActiveX控件编程相关

    其他的基本可以选择默认属性,然后我们就可以进入自己新建的工程了,如右下图所示。方框中标出的是新建控件之后自带的三个类。我做的控件只是使用了C***Ctrl这个类,主要是设置一些与外界进行数据通信的接口的属性的,我自定义的几个属性都是在这里完成编程的。
    2、为控件添加对话框

    VC++下的ActiveX控件编程相关

     

     

     

     

    这个控件的思想其实不是我的原创,只是项目的变化而产生的,而之前我是基于传统的上位机软件来编写这个程序的,所以就选择了向控件中加载对话框的方法。首先是设置对话框的ID,这里假设对话框的ID为IDD_XY_DLG,然后我们可以在C***Ctrl中的OnCreate() 函数中添加对话框的加载程序,具体的程序如下:
        int C***Ctrl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
        {
         if (COleControl::OnCreate(lpCreateStruct) == -1)
         return -1;

         dlg.Create(IDD_XY_DLG,this);
         dlg.ShowWindow(SW_SHOW);

         return 0;
        }

     

    对话框添加完之后,对对话框的操作与基于对话框的操作时完全一致的。所以这里没有什么好讲的。我自己的对话框的编写也基本移植的之前自己编写的上位机的程序。

    3、为控件添加属性

    制作控件的一个重要原因就是要提高程序的通用性,而通用性的提高必须是控件能够与第三方程序进行数据交换,这里的数据交换就是通过控件的属性来完成的。现在我们来讲一下添加属性的步骤。View->ClassWizard->Automation后进入添加界面,如下图所示:

    VC++下的ActiveX控件编程相关

    注意上图中红色直线标注的部分,我们是在C***Ctrl类下来进行属性的添加,做为示范,我们用两种方法分别添加两个属性。

    (1)在上图中点击Add Property按钮添加新的属性名称,如下图所示。

    VC++下的ActiveX控件编程相关

    我们添加一个名字为xy0的float型属性,这里需要注意的是最上面的External name上填写的是控件属性的外部名称,就是第三方用户在使用你的控件时看到的属性名称,而系统会自动为你生成一个Variable name名称来关联你添加的属性的外部名称。我们在控件内部编程时只需要调用内部变量就可以了。现在我们来使用Member variable属性创建属性,这种方式不需要自己编写关联,而是系统自己为你添加。一路点击OK就可以完成属性的添加,我们可以看到在C***Ctrl类上新增了与新添加的属性相对应的程序,这个程序相当于属性值发生改变的回调函数,具体的程序如下:

        void C***Ctrl::OnXy0Changed()
        {
         // 添加属性值发生改变后需要控件进行的相应的操作

         SetModifiedFlag();
         }

    (2)使用Get/Set methods属性创建属性。
    使用这种方法添加的属性,我们需要自己编写获取控件属性函数和改变控件属性程序。在我做的项目中,使用这种方法比较的多,我们以新建一个float型的C5属性做为例子,添加属性后,我们可以看到系统新增了两个函数——GetSC5() 和SetC5() ,对应着获取属性的值和设置属性的值,具体的程序如下:

        float C***Ctrl::GetSC5() 
       {
        // 获取C5属性相应的操作

          return f0.0; //返回属性值
        }

        void C***Ctrl::SetC5(float newValue)
       {
        // 设置C5属性相应的操作

        SetModifiedFlag();
        }

  • 相关阅读:
    .net winform软件自动更新
    系统升级程序的介绍(转)
    View、ViewGroup (转)
    修改ViewPager调用setCurrentItem时,滑屏的速度
    onSaveInstanceState和onRestoreInstanceState
    onSaveInstanceState(Bundle outState)的调用时机
    如何在Eclipse中查看Android源码或者第三方组件包源码
    MyBatis学习总结(一)——MyBatis快速入门
    ASP.NET提取多层嵌套json数据的方法
    C# 解析 Json数据
  • 原文地址:https://www.cnblogs.com/rushoooooo/p/2087547.html
Copyright © 2011-2022 走看看