问题描述:
今天使用CustomToolTipDemo的时候, 遇到了一个很奇怪的问题, 在作者提供的MFC例子上, 我新建了一个按钮, 并且把该按钮绑定搞一个CButton类, 然后, 为该按钮添加tooltip, 运行一切正常. 当鼠标划过按钮上方的时候, 可以显示tooltip.
然后, 我自己创建一个MFC工程, 添加按钮控件, 绑定CButton, 然后运行, 当鼠标滑过按钮上方的时候, 就显示不出tooltip. 跟踪进去, CButton类里面确实有值, m_hWnd非空, 还对应这CButton的窗口矩形都可以看到.
思路发现:
通过自己研究代码, 发现, 作者的demo, 当鼠标滑过按钮的时候, 主窗口仍可以处理WM_MOUSEMOVE消息, 而我的主窗口竟收不到WM_MOUSEMOVE消息!
原来, 作者是在父窗口的PreTranslateMessage()里面处理的MouseMove消息, 而我是在父窗口的WindowProc()里面处理的!
原因是, 当父窗体执行过TranslateMessage()之后, 把MouseMove消息发送到CButton类对应的窗口上去了, 而自己没有留下这个消息! 难怪作者要在TranslateMessage()里面处理MouseMove消息.
!!!注意
1:
当鼠标滑过子控件时, 父窗体将不会再会收到鼠标之类的消息. 除非子控件把消息回传给父窗体.
据说, 一般MFC工程师, 都会派生自己的CMyButton类, 处理消息, 有必要时把消息回传给父窗体.
2:
要么,在父窗体派发消息之前就处理该消息!!! 呵呵 就是TranslateMessage().