RT,用PeekMessage()试了试,没成功,不大会用这个函数。例如:
在一个View中存在一个TreeCtrl,TreeCtrl响应两个消息NM_CLICK,TVN_SELCHANGED。
我在点击树形控件的同时改变选择的节点,这时产生了NM_CLICK,TVN_SELCHANGED这两个消息。
我想在NM_CLICK消息的处理函数中删除产生的TVN_SELCHANGED消息,使其不再调用TVN_SELCHANGED消息的处理函数。那位大侠发个例子给小弟看看,thanks~~

解决方案 »

  1.   

    PeekMessage()查询
    GetMessage()获取,并删除
      

  2.   

    在PreTranslateMessage中拦截TVN_SELCHANGED消息,直接返回。
      

  3.   

    还是在PreTranslateMessage中过滤掉消息,不处理,直接返回
      

  4.   

    到PreTranslateMsg或者DefWinProc里面去拦截消息
      

  5.   

    控件发给其父窗口的各种通知都是通过SendMessage发送的,直接由WindowProc响应,GetMessage/PeekMessage是取不到的,也不会经过PreTranslateMessage函数。如果要过滤消息,就重载WindowProc或者OnNotify函数来处理。
      

  6.   

    你的理解上有问题,窗体接收到的消息是windows系统发送的,你如果不想处理TVN_SELCHANGED消息,相应的处理函数里不做操作就可以了,如果是MFC程序,不要映射TVN_SELCHANGED消息就可以了,你的Tree只截获NM_CLICK消息做OnClick的函数处理就可以了!
      

  7.   

    我做的测试工程里存在两个TreeCtrl(称其为Tree1和Tree2)和一个ListView,每个TreeCtrl的节点都对应在ListView中要显示的内容。改变TreeCtrl选中节点的方法有两种,一种是用鼠标,还有一种是键盘。
    如果我只对两个TreeCtrl分别做TVN_SELCHANGED处理,可以完成单个TreeCtrl的功能。
    但是存在一个严重的问题:
    我先选中Tree1的一个节点A,ListView中显示Tree1 A节点对应的内容,没问题;
    再选中Tree2的一个节点B,ListView中显示Tree2 B节点对应的内容,也没问题;
    最后再选回我最开始选中的Tree1的A节点,ListView中仍然显示Tree2 B节点对应的内容。
    问题出在这里:
    第一次操作产生了TVN_SELCHANGED消息,Tree1对其进行了处理。
    第二次操作也产生了TVN_SELCHANGED消息,Tree2对其进行了处理。
    但是第三次操作并没有改变选中,所以并没有产生TVN_SELCHANGED消息。后来我对其进行了改进,对两个TreeCtrl分别增加了NM_CLICK消息。
    通过获得坐标,调用HitTest(),也可完成相应的功能。但是这样就会出现用鼠标点击并改变节点时,进行两遍重复功能的操作。
    如果只做NM_CLICK消息处理,键盘改变选中节点便不好使了~~所以才会有这个帖子~~
    通过逻辑判断也可以避免重复操作,但是我就是想用删除消息的方法。
    麻烦大家了,thanks
      

  8.   

    加个变量,记录ListView当前显示的是哪个TreeCtrl的哪个节点对应的内容,在响应消息时,判断如果TreeCtrl和节点均未改变,则直接返回不做处理。
      

  9.   

    在BEGIN_MESSAGE_MAP()
    下面把那个消息注释提不行吗。
      

  10.   

    到PreTranslateMsg或者DefWinProc里面去拦截
      

  11.   

    消息是你的一个动作,比如你点击了一下鼠标左键,这是无法撤销的。
    但是它产生了咱们可以切断它的传输路径,比如在PreTranslateMessage中过滤掉消息,
    这样在到达你的消息处理函数中就不会收到此消息了。
    你可以试试看,过滤掉后消息处理函数中还保留对此消息的处理代码,你看它还执行不。
      

  12.   

    PostMessage放到消息队列里面的消息可以删除(移除),SendMessage实际上就是函数调用,只能是跳过处理,不能删除。
    你现在的问题按我在12楼的回复就可以解决,做法也很简单。
      

  13.   

    回复cnzdgs:
    恩,功能我已经实现了,就是用逻辑判断的方法。
    但是用过滤消息的方法可以实现吗?
    如果可以实现,能给些代码吗,小弟初学~~
    thank you
      

  14.   

    过滤就是重载WindowProc或者OnNotify,判断指定的消息,另外设置一个标志变量决定是否跳过,如果要跳过则直接返回。