用MFC ActiveX ControlWizard制作一个以通用控件类为基类派生控件,不妨以CListCtr类l为例,假设我们只要实现和它一样的功能,而且先不加入新功能,则在程序设计的时候,我们怎么利用原有的东西啊?

解决方案 »

  1.   

    插入一个从通用控件类(如 CListCtrl)继承的新类, 在控件 OnCreate 时创建它。//m_myList 是新类的成员变量
    CRect rectClient;
    GetClientRect( &rectClient );
    m_myList.Create( WS_CHILD|WS_VISIBLE|WS_BORDER|LVS_LIST, rectClient, this, 1);
    m_myList.InsertItem( 0, "hello" );
    m_myList.InsertItem( 0, "hello1" );
      

  2.   

    不好意思,注释写错了,m_myList是新类的实例,控件类的成员变量。
      

  3.   

    将新的控件类从CListCtrl派生出来,然后在几个基本类中调用这个父类的相同方法就可以了。比如OnDraw,另外还需要给出对应的方法和属性不过属性页估计没有办法继承,还是要你自己加上
      

  4.   

    turnmissile,我在直觉上觉得你的想法很好,非常感谢 !
    不过,我用什么建立工程呢?是MFC ActiveX ControlWizard还是ATL COM AppWizard?我有这个疑问是因为用前者建立的工程好像不能继承CListCtrl,只有syslistview32,也许是我不知道吧。我在开始写具体方法的代码之前,都需要做哪些准备?
    第二个问题,这样做之后,我要的属性、事件和方法,是不是都能通过ClassWizard添加?
    还有,以ListCtrl为例,这样写代码可以吗?
    BOOL CMyList::SetTextBkColor(COLORREF cr)
    {
    CListCtrl::SetTextBkColor(cr);//是ClistCtrl的成员函数
    }
    在此感谢能得到您的指导
      

  5.   

    blueblood70,我不太明白的是在您所做的这些工作之前,您是怎样操作的?
    是用MFC ActiveX ControlWizard建立的工程下,试了您的方法,可是编译报错,问题出在前面,我怎么样建立新类啊?
      

  6.   

    右键点击 ClassView 中的根元素,选"new class..."。
      

  7.   

    非常感谢您的指点!您的想法我好像已经领会到了。
    就是说控件的每一个方法都要通过CListCtrl的新类CMyList的实例m_myList来进行调用,这样一个一个的添加控件的方法,是这样理解吗?
    这里怎么不能粘贴附件,我想把我的代码上传都不能。
    希望能继续得到您的指导。
      

  8.   

    blueblood7()大侠,你好:
        我用您的方法试了一下,发现有新的问题,在CListCtrl中,有许多属性、方法需要的参数和返回值,ClassWizard 没办法加入,他只提供集中给定的类型,遇到这种情况怎么办?
        还有我怎么样才能看到CListCtrl的所有属性、方法和事件呢?
        急需您的指导。