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