C# WPF:绘制自己的光标-非平凡问题
我需要实现一个具有一些非常特定功能的游标:C# WPF:绘制自己的光标-非平凡问题,c#,wpf,cursor,click-through,snapping,C#,Wpf,Cursor,Click Through,Snapping,我需要实现一个具有一些非常特定功能的游标: 它必须是动画的 因为n秒后,它会自动单击-因此,当单击发生时,动画是对用户的反馈 它必须与我们的一些控制装置相连接 它必须在我们的应用程序之外工作 迄今为止的做法: 将我的WPF控件呈现为位图,从中生成游标结构,并使用user32.dll/SetSystemCursor进行设置 PRO 光标在鼠标之后没有延迟,因为它是真实的光标 CON 捕捉非常困难,特别是因为我们有绝对和相对输入设备,我必须一直重置鼠标位置,或者使用user32.dll/
- 它必须是动画的
- 因为n秒后,它会自动单击-因此,当单击发生时,动画是对用户的反馈
- 它必须与我们的一些控制装置相连接
- 它必须在我们的应用程序之外工作
- 将我的WPF控件呈现为位图,从中生成游标结构,并使用user32.dll/SetSystemCursor进行设置
- PRO
- 光标在鼠标之后没有延迟,因为它是真实的光标
- CON
- 捕捉非常困难,特别是因为我们有绝对和相对输入设备,我必须一直重置鼠标位置,或者使用user32.dll/ClipCursor(System.Windows.Forms.Cursor.Clip也一样),但是捕捉到的光标总是在捕捉位置周围晃动(尝试逃逸,再次重置…)
- 我使用的代码会在一段随机时间后抛出奇怪的异常,因此我当前的代码看起来相当不稳定
- 将我自己的光标渲染到最大化、最顶部、允许透明、windowstyle=none、不可见的窗口中,并在鼠标后手动移动光标(如Canvas.SetLeft(cursor,MousePosition.X))
- PRO
- 捕捉可以(容易地)完成
- CON
- 当鼠标点击并点击光标时,光标被点击,而不是窗口
- 一直在调度程序后台循环中轮询鼠标位置对我来说不是很漂亮
public const int WS_EX_TRANSPARENT = 0x00000020;
public const int GWL_EXSTYLE = (-20);
[DllImport("user32.dll")]
public static extern int GetWindowLong(IntPtr hwnd,
int index);
[DllImport("user32.dll")]
public static extern int SetWindowLong(IntPtr hwnd,
int index, int newStyle);
public static void makeTransparent(IntPtr hwnd) {
int extendedStyle = GetWindowLong(hwnd, GWL_EXSTYLE);
SetWindowLong(hwnd, GWL_EXSTYLE, extendedStyle | WS_EX_TRANSPARENT);
}