我重写了一个类的部分功能,其中也重写了OnClick(),然后我使用这个类的时候发现,此类的OnClick()不能被激活了,怎么让其激活。谢谢。在线等待

解决方案 »

  1.   

    你是想用多态么?声明时用virtual.你是在做窗口响应么?那必须在MESSAGE_MAP内添加映射关系。
      

  2.   

    是多态。 映射关系也有。我在派生类中使用了OnClick(),然后在窗口中,放入了一个此控件,我希望在窗口类中也增加这个响应,之后的执行顺序是:先执行派生类中的OnClick,然后再执行我的窗口类中的OnClick怎么实现?
      

  3.   

    映射关系得放到派生类,派生类中调用Base::OnClick();
      

  4.   

    就是说直接把按钮单击响应的函数添加到派生类中,再在其中调用基类的OnClick()
      

  5.   

    问题是基类中没有OnClick()这个函数。我派生的是CTreeCtrl。其响应的消息是NM_CLICK。 但就是没有OnClick这个函数。到底怎么回事
      

  6.   

    大概明白了。你是在你的窗口中放了一个TreeCtrl控件,并在CTreeCtrl的派生类和窗口类中各放了个OnClick();但你的OnClick()是响应什么啊?窗口上按钮单击消息?如此的话,自然是只能调用你在窗口类中添加的响就函数OnClick()了,不可能先调用你在CTreeCtrl的派生类中的OnClick...
      

  7.   

    窗口类中的OnClick响应鼠标单击CTreeCtrl的动作。 但是需要先执行派生类中的OnClick 。 问题是现在能执行派生类中的OnClick,但是不会执行窗口类中的OnClick。 我需要他也执行窗口类中的OnClick。 我说的很绕口,谢谢。
      

  8.   

    ((YourWindowClass*)GetParent())->OnClick()...
      

  9.   

    我本想将这个类做成一个独立的类,以后使用的时候不想再修改代码。其实只要我屏蔽掉类中的这行代码 ON_NOTIFY_REFLECT(NM_CLICK, OnClick) ,我主程序的OnClick就能执行。各位达人,真的没有别的办法了吗?