自己参考了一些资料,做了一个继承自cwnd的类,界面如msn,左侧类似msn左侧的那种图标切换按钮,点击图标显示一个dlg,给每个图标设定了一个范围rect,mousemove到图标上或离开时切换图标。具体在view中creat这个类之后,用onmousemove响应时,用rect.PtInRect(point)判断,可是鼠标到图标上时能变,离开时,鼠标直接到客户区外不能变图标,鼠标在客户区内的dlg界面内也不能变图标,只有把鼠标移到客户区内的非dlg的区域时才能变成离开该区域的图标,这是为什么?坐标是不是需要经过转换?该客户区和view窗口坐标之间怎么转换?

解决方案 »

  1.   

    可能是别的窗口接收了mousemove的消息,你用Spy++查看一下。还有到了客户区外你的窗口接收不到mousemove消息,你需要SetCapture,或者需要设置鼠标离开的事件。
      

  2.   

    你的意思是鼠标move到dlg时,dlg接管了鼠标,move出客户区时,view接管了鼠标。
    具体应该是这样的,可是我怎么解决呢?
    SetCapture没用过,大虾能否给具体解释下。。
      

  3.   

    1.WM_MOUSELEAVE 重载这个消息响应函数.
    2.在重载的 WM_MOUSEMOVE 中判断是否在 "标签"区域内.以上两个联合使用,不是单单只用一个啊.
      

  4.   

    在其他的界面里PostMessage(..WM_MOUSEMOVE...)