类似msn左侧按钮切换界面,onmousemove判断的范围不正确?该怎么解决

类似msn左侧按钮切换界面,onmousemove判断的范围不正确?
自己参考了一些资料,做了一个继承自cwnd的类,界面如msn,左侧类似msn左侧的那种图标切换按钮,点击图标显示一个dlg,给每个图标设定了一个范围rect,mousemove到图标上或离开时切换图标。

具体在view中creat这个类之后,用onmousemove响应时,用rect.PtInRect(point)判断,可是鼠标到图标上时能变,离开时,鼠标直接到客户区外不能变图标,鼠标在客户区内的dlg界面内也不能变图标,只有把鼠标移到客户区内的非dlg的区域时才能变成离开该区域的图标,这是为什么?坐标是不是需要经过转换?该客户区和view窗口坐标之间怎么转换?

------解决方案--------------------
可能是别的窗口接收了mousemove的消息,你用Spy++查看一下。还有到了客户区外你的窗口接收不到mousemove消息,你需要SetCapture,或者需要设置鼠标离开的事件。
------解决方案--------------------
注意,
因为不是一个窗口
所以你只在自已的窗口进程中只能收到自已窗体的消息
如果你想收程序的所有消息,应该在你的 消息泵 载取!
但这样也是有可以出现上述情况的,比如移动太快,消息没有发送到你的进程!

不怕麻烦的话可以用 鼠标 钩子
------解决方案--------------------
1.WM_MOUSELEAVE 重载这个消息响应函数.
2.在重载的 WM_MOUSEMOVE 中判断是否在 "标签"区域内.

以上两个联合使用,不是单单只用一个啊.
------解决方案--------------------
在其他的界面里PostMessage(..WM_MOUSEMOVE...)