downcast?可以在不确定的时候传父类的指针,在转化啊

解决方案 »

  1.   

    to icecools:
       能不能讲得详细一些
      

  2.   

    simple example
    calss a{
    int i;
    int GetI(){return i;}
    };
    class B:public a{
     int ii;
     int GetII(){return ii;}
    };
    here is a function
    Fun(a aa);
    u can use Fun(b bb);
    在vc中类都是CObject的子类,着样你就可以把你的类传给它了
      

  3.   

    您是不是说 
    CWnd::SubclassWindow
    BOOL SubclassWindow( HWND hWnd );
      

  4.   

    icecools,你说的是多态吧!多态好像也不能象你那么用,是用指针或者引用来实现的。
      

  5.   

    to haitian99:
        我的概念也不是很清楚,但超类及子类似乎有一个函数setclasslong之类的记不太清楚了
      

  6.   

    to haitian99:
        似乎有点象您说的
      

  7.   

    用SubclassDlgItem函数动态连接控件和控件对象    要在程序中创建新设计的控件,显然不能用自动创建的办法,因为对话框模板对新控件的特性一无所知.程序可以用手工方法创建控件,在调用派生类的Create函数时,派生类会调用基类的Create函数创建控件.用Create函数创建控件是一件比较麻烦的工作,程序需要为函数指定一大堆的控件风格以及控件的坐标和ID.特别是控件的坐标,没有经验的程序员很难确切地安排控件的位置和大小,往往需要反复调整.利用MFC的CWnd::SubclassDlgItem提供的动态连接功能,可以避免Create函数的许多麻烦,该函数大大简化了在对话框中创建派生控件的过程.    在用手工方法创建控件时,先要构建一个控件对象,然后再用Create函数在屏幕上创建控件窗口,也就是说,控件的创建工作是由控件对象完成的.动态连接的思路则不同,SubclassDlgItem可以把对话框中已有的控件与某个窗口对象动态连接起来,该窗口对象将接管控件的消息处理,从而使控件具有新的特性.SubclassDlgItem函数的声明为        BOOL SubclassDlgItem( UINT nID, CWnd* pParent );
        参数nID是控件的ID,pParent是指向父窗口的指针.若连接成功则函数返回TRUE,否则返回FALSE.综上所述,要在程序中使用派生控件,应该按下面两步进行:
    1. 在对话框模板中放置好基类控件.
    2. 在对话框类中嵌入派生控件类的对象.
    3. 在OnInitDialog中调用SubclassDlgItem将派生类的控件对象与对话框中的基类控件相连接,则这个基类控件变成了派生控件.
        
        例如,如果要在对话框中使用新设计的编辑框控件,应先在对话框模板中的合适位置放置一个普通的编辑框,然后,在OnInitDialog函数中按下面的方式调用SubclassDlgItem即可:BOOL CMyDialog::OnInitDialog()
    {
        CDialog::OnInitDialog();
        m_MyEdit.SubclassDlgItem(IDC_MYEDIT, this);
        return TRUE;
      

  8.   

    以上是从fireangle大哥那copy&paste,大家参考一下
      

  9.   

    SetWindowLong可以把一个WND对象的属性改变,包括它的消息处理流程函数。SubClassDlgItem
    的原理应该也差不多。在MFC里就好象用另外一个类来处理消息流程了,是不是这个概念?