我继承CSTATIC类做了几个类,例如CS1(在本控件区域内画直线),CS2(在本控件区域内画圆),CS3(在本控件区域内画矩形)。每个类中都是完成不同的功能,显示不同的内容。现在又新建一类CS4,要求包括CS1,CS2,CS3这个三个类的变量,在CS4中分别创建出CS1,CS2,CS3三个实例(就是在CS4控件区域内画直线,画圆,画矩形),怎么做啊?
1、CS4该继承那个类?如果还继承CSTATIC类该如何做啊 ?
2、CS1,CS2,CS3的动态创建(Creat)放在那里啊?OnPaint?CS4的Creat函数中?
3、CS4又如何把CS1,CS2,CS3的一些事件向外反应出来啊?如果是添加到CDIALG类或者什么子窗体中去,我也知道编写。我也不知道有可能实现不?有的话最好给一例子?在做一项目界面想到的上面问题,以此类推,也想到是否可以把VC的CSTATIC和CEDIT两个控件合并生成一个控件或类使用(就如同CSTATIC摆前面,后跟一个CEDIT,在DELPHI中很容易实现)?本人VC不是很熟悉,能实现的话请告之。

解决方案 »

  1.   

    方向反了,应该让CS1,CS2,CS3成为CS4的派生类,这样问题就好办了
      

  2.   

    CSTATIC类派生出CS4类,CS4类派生出CS1,CS2,CS3三个类
      

  3.   

    楼主,你的CS4,自己要实现一些功能类似CS1,2,3的功能吗?其实不太明白你的意思,觉得应该CS4也是继承自CStatic,放在OnPaint中创建,不适合吧.那个是专用重画时用的地方.在写SDI时,我们是在OnCreate处加入动态创建控制的代码,那么我想你的CS1,2,3也应该放在CS4的OnCreate函数中去处理了.
      

  4.   

    可能我没说清楚,举个简单的例子吧,
    从CButton中继承,创建一个新类CMyButton,想在CMyButton类中有个变量CStatic m_static;
    然m_static需要手动创建,那这个创建放在CMyButton那里?在CMyButton类中怎么使用这个m_static,是不是和平常使用一样?最好有一个例子。
      

  5.   

    Sorry,我之前说的,其实我没试过代码,原来我之前说的响应WM_CREATE是不行的.
    后来我试过代码了,那些在DLG窗里的控件,都不响应WM_CREATE的,在CMyButton类里面,增加虚函数void CMyButton::PreSubclassWindow() 
    {
    // TODO: Add your specialized code here and/or call the base class
    m_Static.Create("test CStatic",WS_CHILD|WS_VISIBLE|SS_LEFT,CRect(10,10,100,30),this);
    CButton::PreSubclassWindow();
    }这样,就在按钮上添加了一个CStatic的控件了.
      

  6.   

    其实我在想  可不可以创建一个新类,然后封装CS1,CS2,CS3的对象,通过调用这些对象从而达到这种效果
      

  7.   

    楼主说的应该跟6楼说的差不多,他现在是创建一个新类(CMyButton),里面封装了 CS1 (CStatic).