我欲替换系统鼠标(不是此程序的鼠标)为一图标 和一个很大的十字架,我做了如下工作:
1.隐藏系统鼠标
2.Hook到Mouse位置
3.画一个图标
4.画线(十字架)
问题出现了:
当移动鼠标的时候,前面的画线和图标擦除不掉,欲擦除屏幕,多次尝试不得结果,请高手指点迷津。
可能有用的东东: WM_PAINT,Invalidate...好像无法工作
1.隐藏系统鼠标
2.Hook到Mouse位置
3.画一个图标
4.画线(十字架)
问题出现了:
当移动鼠标的时候,前面的画线和图标擦除不掉,欲擦除屏幕,多次尝试不得结果,请高手指点迷津。
可能有用的东东: WM_PAINT,Invalidate...好像无法工作
把鼠标画好,做成资源文件,调用出来不就可以了。或者直接动态的调用鼠标:
var
MyCursor : HCURSOR;...
//加载动画光标
MyCursor := LoadCursorFromFile ( 'MMouse.ani );
SetClassLong ( Form1.Handle, GCL_HCURSOR, MyCursor );
不过直接画不好控制.给你两种方法:
1) 采用XOR画(我以前在DOS下画鼠标就是这么画的):
记下当前鼠标位置 -> 设置绘制方式为XOR方式 -> 画出鼠标
鼠标移动后 -> 先在旧的地方画一个鼠标(这样自己就擦除了,XOR操作就是) -> 再再新位置画出,并记下当前的鼠标位置.
为什么要用XOR方式就可以擦除呢?假设原来有一个点的像素值:10011001 要画到这个点的像素值:00011010
XOR后 : 10000011
再和原来的点XOR : 00011010
变回来了 : 10011001 2) 如果不用这种方式,就在画之前,保存鼠标所在区域的图像,然后画上鼠标. 在下一次画之前,恢复原来地方的图像,再重新画.
这样是可以实现的,但是经常由于某些原因,造成屏幕有残留的痕迹,还是需要重绘屏幕。
再有,光标文件好像像素位数受限,画一个jpg图片比较好吧。
那么 如何解决屏幕画一个jpg图片并跟随鼠标移动,并且部产生重叠? 谢谢。
每次画之前InvalidateRect(&r1);InvalidateRect(&r2);
一般都是移出窗口时会留下一个十字架,在移出时可以刷新窗口。