正常表现特征:
按扭是动态的,鼠标移到按扭上方的时候按扭会在字体上有所变化。令我不解的异常分析特征:
1:我用Spy++来分析这个已经运行的程序,探测器移动到按扭的上方的时候没有探测到任何控件,但是按扭上的字体发生了变化,就是说按扭知道鼠标移动到了它的上方。所以猜测,这些按扭是画上去的,不是实际的BUtton控件。
2:于是我用vc以资源的方式打开了这个exe文件,查看主窗体,上面除了几个其他的控件(这几个控件已经在运行后的界面上对应找到)外果然没有任何按扭控件存在,初步证实了上面一条的猜测。
3:为了不让鼠标移动到上方时按扭有变化,我做了一个鼠标HOOK的DLL ,里面我屏蔽了全局的WM_MOUSEMOVE消息。启动dll后,鼠标移动到windows下面任务栏的快捷图标的时候都不再有任何反应,移动到vc环境界面时,那些按扭(比如编译,保存...)遇到鼠标也不再有下陷的效果。说明我的dll有效。但是启动那个程序后,鼠标移动到按扭上方时仍然会有反应,字体依然变化。效果就象我并没有成功拦截到鼠标移动消息。
4:我再次做了一个DLL,这次我截取了所有那个程序的WM_PAINT消息,启动程序后,那个程序中其他的控件全部变灰,但是奇怪的是,这些按扭不受影响!鼠标移动过去依然会变化,且移走后恢复,没有变灰掉色的表现。实在是不明白了,希望各位帮忙分析一下!

解决方案 »

  1.   

    呵呵,人家比你做得更底层而已
    那个按钮的重绘等消息完全是自己控制的,所以hook消息没用
    我认为,不需要很麻烦,用directdraw画这个按钮,用directinput读取鼠标信息,就可以做到
      

  2.   

    难道是 DirectDraw?
    不懂,顶下,JF
      

  3.   

    完全自己绘制一个按钮,并且处理了按钮相关消息.
    MSN也一样的,只不过用的是dx不是gdi
      

  4.   

    Spy++还可以监控指定窗体上的全部消息,你有没有看过鼠标移过时都有什么消息产生呢?
      

  5.   

    消息太多了 好几百个 不知道怎么挑选某时刻的消息?SPY++勉强第一次用
      

  6.   

    有没有WM_TIMER消息?程序可以在WM_TIMER里检测鼠标位置,不理会WM_MOUSEMOVE。或者有一个鼠标位置监视线程,在线程或WM_TIMER或WM_ERASEBKGND消息里面也可以绘制按钮。
      

  7.   

    ringphone(临风)说的也对啊,鼠标位置监视线程存在也很正常。那可就没的拦了,突然觉得做一个东西的路子太多了,千变万化啊