新手初学MFC,如果问题太白痴请大家多多包涵。1.我在程序中定义了CButton类的子类MyButton类,想要使这个类动态生成的所有按钮都响应同样的单击事件(如弹出消息窗口),应该在什么地方设置消息响应函数?又如何使这个函数可以响应消息?我直接使用ClassWizard添加时,只能分别单独添加非动态生成的每一个按钮的单击事件,而且没有响应。2.定义MyButton类后,在可视化编辑界面中,所有拖到窗体中的按钮添加事件时,消息响应函数都是 void MyButton::On***() 这类的,这是否说明所有的按钮都是使用MyButton类生成的?但是我需要在同一窗体中同时使用CButton类生成的按钮和MyButton类生成的按钮,该如何做?是否要动态生成CButton类的按钮?

解决方案 »

  1.   

    1.我在程序中定义了CButton类的子类MyButton类,想要使这个类动态生成的所有按钮都响应同样的单击事件(如弹出消息窗口),应该在什么地方设置消息响应函数?又如何使这个函数可以响应消息?我直接使用ClassWizard添加时,只能分别单独添加非动态生成的每一个按钮的单击事件,而且没有响应。    你继承了CButton,那就可以同样继承它的所有响应函数(如单击)。但这只能手动添加,ClassWizard应该帮不了忙。你可以去网上搜索代码参照。2.定义MyButton类后,在可视化编辑界面中,所有拖到窗体中的按钮添加事件时,消息响应函数都是 void MyButton::On***() 这类的,这是否说明所有的按钮都是使用MyButton类生成的?但是我需要在同一窗体中同时使用CButton类生成的按钮和MyButton类生成的按钮,该如何做?是否要动态生成CButton类的按钮?  你记得拖到窗口的按钮控件的ID,然后在你的对话框类在添加MyButton类的成员变量MyButton mb,在初始化函数中调用mb.SubclassDlgItem(id/*id为你想为MyButton类生成的按钮的控件id*/).有多少个你就使用定义多少个MyButton变量,使用这个函数多少次。至于CButton类生成的按钮应该比较容易,就不用说了吧
      

  2.   

    谢谢wqvbjhc的解答,但是还有一些问题,请再帮帮忙,分可以再加1、我看了一些网上的例子,大多是根据按钮的ID为每一个按钮分别事先添加单击事件。但是,我的程序中生成按钮的个数是由用户确定的,所以没办法事先得知每个按钮的ID,因此也不能事先写出相应的事件响应函数。我需要所有的MyButton类生成的按钮如mb1、mb2、mb3……自动响应同一单击事件,也就是说,每次我调用create()创建一个按钮后,不需我另外添加,它就已经可以响应事先写好的同一单击事件,如void MyButton::OnClicked()。是否需要在类的构造函数或create()函数中调用这一响应函数?还是有其它的方法2、我拖到窗口中的按钮,好像默认的就是MyButton类的按钮,并不是CButton类的按钮。我需要其中的一些就只是基类CButton类的按钮,没有MyButton类的扩展属性,比如不能响应MyButton类那个共同的单击事件响应函数,要怎样做呢?
      

  3.   

    1. 只要把响应和处理单击事件的函数放在你的派生类里,用这个派生类创建的按钮就都会响应相同的单击事件了
    ——添加处理函数是直接写MyButton::OnClicked()这个函数么?它会自动调用么?不需要添加消息映射?
    2. 把按钮分两类,一类你自已派生的,一类是VC自带的,这样处理起来简单些
    ——就是不知道怎么分类啊我初学,很多基础知识都不了解,请各位大侠说的详细点好么?