为了屏蔽掉鼠标的一些消息,我需要将一个ListCtrl控件子类化。但是为了自绘这个控件,我自写了一个派生于CListCtrl的类,并让为控件关联一个这个派生类的对象。
问题:1、如果控件关联的是CListCtrl类对象,实现起来就没问题,但关联的是CListCtrl的派生类的对象时执行起来就奔溃了,请问要怎么实现?
      2、除了子类化可以屏蔽掉消息外,还有其它什么办法吗?

解决方案 »

  1.   

    可以啊,在对话框的PreTranslateMessage中屏蔽消息
      

  2.   

    1.有些消息是不能屏蔽的,一般交给Def处理,如果自行处理不当的话,可能会崩溃...
    2.有的时候消息还会到达容器形成OnNotify
      

  3.   

    不好意思。可能问题描述不太好。
    就是这样的,我从外部导入了一个类,该类是从CListCtrl派生来的,我把它导入到我的程序后发现它没有可以添加的消息,例如WM_LBUTTONDOWN等都没有,连那个可以添加消息的选项没了。正常情况下,从MFC派生来的类都是可以响应消息的。请问是怎么回事啊?我想程序出错的地方就是这个类根本没有消息可以屏蔽。
      

  4.   

    关闭程序,把ncb,clw文件删除后重新打开试试
      

  5.   

    不用class wizard,你手动添加消息也是一样的啊
      

  6.   

    为了屏蔽掉鼠标的一些消息.
    不能去PretranslateMessage里面去屏蔽么?
      

  7.   


    话说你有没BEGIN_MESSAGE_MAP和END_MESSAGE_MAP?
    最好贴点有用的代码上来
      

  8.   

    请问你哦,是不是我从CListCtrl派生出的CMyListCtrl是不能子类化话的?
      

  9.   

    肯定可以。
    class QListCtrl : public CListCtrl
    {
    };
    QListCtrl m_qctrl;
    在DDX中关联m_qctrl和ID,你试试,这样就是子类化。很显然可以,否则岂不是违背了C++标准。
      

  10.   

    你说的这样是可以的。但我是要屏蔽掉鼠标拖拉listctrl控件的header。
    我用的就是m_header.SubclassWindow(m_qctrl.GetHeaderCtrl()->m_hWnd).
    其中m_header是从CHeaderCtrl派生出来的对象.目的是用来截获鼠标的点击消息的.
    但是一执行就出错了.