在mainframe或者view中编写某个消息的响应函数时,mfc会自动带上一些代码,例如响应cview的LBUTTONDOWN消息,编辑
MFC自动生成OnLButtonDown函数,里面的代码是
       
          // TODO: 在此添加消息处理程序代码和/或调用默认值
          CView::OnLButtonDown(nFlags, point);我的问题是,
1、MFC为什么还要自动生成代码调用 CView::OnLButtonDown(nFlags,point),我是否可以删掉这一句?
2、很多消息响应函数都有这样的自动生成代码,为什么要这样?
3、如果不能删除这一句,我是否可以把我的代码写到这一句后面执行?而不是象TODO指示的位置那样,在这一句前面?

解决方案 »

  1.   

    1.这句是调用的基类的这个函数,你写的代码只不过是重写了基类的响应的函数,
      我只能说最好不要删,比如在PreTranslateMessage()函数中,如果你把基类的
      函数删掉,那么基本上的消息都不会响应,而我们在屏蔽一些消息可以在这里添加代码
    2.MFC这个框架就是自动生成的,我们使用就是重写某个类的基类大部分操作都在基类的函数
      实现,但是有些扩展的需要重写相应的函数,以达到要求,你可看一下,c++中继承,多态那部分
      知识
    3.是可以写在这句话下面的,如在使用OnSetCursor()函数更改光标的时候,如果不写在
      这那句话后面,自己设置的是无效的。
    以上是本人对这个问题的看法,仅代表个人看法。如有不对,欢迎指正
      

  2.   

    1.一般来说都不要删除,但是可以视情况而定。如果你不想要实现基类的功能,比如LButtonDown的这个鼠标消息它会在CView::OnLButtonDown(nFlags, point)的时候把WM_LBUTTONDOWN传递给子窗口,如果你不想传给子窗口那么就可以把这句屏蔽掉了。其他的情况同理。
    2.因为需要表现出父类的一些特性。
    3.一般来说最好放在TODO的位置,但是其实大部分情况是放在前面或后面都可以实现功能。