情况是这样:
我先从CListView派生了CListViewEx类,再从CListViewEx派生了CMyListView类,最初使用正常,但是今天突然发生了奇怪的事情,我在ClassWizard中看不到任何CMyListView的Message了,连简单的双击鼠标Message都不见了。而我手动添加ON_NOTIFY_REFLECT(NM_DBLCLK, OnDblclk)是可以正常使用的,请问这是怎么回事?为什么我的VC不好好干活了?接下来我还要在CMyListView中响应很多Message,难道都要手动添加吗?

解决方案 »

  1.   

    很奇怪,多层继承以后在classwiza里总是看不到消息的,你一开始能看到?
      

  2.   

    不对,ClassWizard 其实是由.CLW文件控制,可能此文件被破坏了,不过删除它是不能自动恢复的。
    假如一定得搞定之,再造工程吧!
      

  3.   

    谁说。CLW文件不能恢复,只是不能自动恢复而已。把你的工程关了。删掉工程的clw文件,打开工程,进入class wizard,vc会问你要不要从新构造clw文件,点ok就行了。试试
      

  4.   

    To  yinx(yinx) :
    多谢你的建议,照你说的做之后可以看到大部分消息了,但是NM_DBLCLK之类的ListView特有消息还是不能在CMyListView的class wizard中看到,但是CListViewEx却可以……
      

  5.   

    难道多层继承之后Class Wizard就失去作用了么?
      

  6.   

    yinx(yinx) 说得对,我来补充一下,vc从新构造clw文件有时不全
      

  7.   

    bjzhaoxiao((Lonely))  is right!
    :)
      

  8.   

    我一直用的方法是,从不多层继承,也就是说,比如你要从CListViewEx继承,就先从CListView继承,然后替换成CListViewEx,这样,classwizard肯定是正常的.
      

  9.   

    现在我已经去掉了多层继承,但是还是只能显示WM_***这样的Message,连那些可以重载的函数都不见了,这是为什么?
      

  10.   

    把你的工程关了。删掉工程的clw文件,打开工程,进入class wizard,vc会问你要不要从新构造clw文件,点addall再点ok就行了
      

  11.   

    好像找到了问题的根源
    是这句:BEGIN_MESSAGE_MAP(CMyListView, CListViewEx)
    如果换成:BEGIN_MESSAGE_MAP(CMyListView, CListView)就可以正确显示Message了。
    哪位大侠能告诉我,在多层继承的时候,BEGIN_MESSAGE_MAP(CMyListView, CListView)中的CListView是否需要替换成CListViewEx(在我的例子中)?如果不替换会怎么样?