有2个问题要给你说明:
1。所有子控件都有自己的消息处理,当鼠标移动到子控件上方的时候,鼠标消息是在子控件的窗口消息处理函数里面处理的。
2。一般控件都有反射消息,就是子控件里面消息拦截以后在反射给父窗口——也就是对话框来处理。
所以,要实现你的移动改变颜色,有2种方法。
1。继承 cstatic类,在其消息处理历程里面对wm_mousemove做拦截判断处理
2。重载线程的消息预处理函数pretranslatemessage,拦截mousemove消息,来执行判断。
续:
得到的pt,当然是相当于static的。可以使用 ClientToScreen得到当前坐标在屏幕坐标系的位置,再通过ScreenToClient(hwnd,xx)得到当前坐标在某窗口(对话框,hwnd就是对话框的窗口句柄)的客户区坐标。
这样再判断就行了。
第二个方法...,就用这个方法吧,具体函数的使用,多看MSDN
这个我也一时想不到好的办法。我的话会在调用DispatchMessage之前拦截WM_MOUSEMOVE消息。因为在控件上的话,WM_MOUSEMOVE消息是直接发给控件的,主窗口自然接受不到。但是一切消息都要通过建立窗口的线程,所以还是可以拦截的。
不好意思,我弄错了