1

我需要实现一个具有一些非常具体的功能的游标:

  • 它必须是动画的
    • 因为在 n 秒后它会自动点击 - 所以当点击发生时动画是用户的反馈
  • 它必须捕捉到我们的一些控件
  • 它必须在我们的应用程序之外工作

到目前为止的方法:

  • 将我的 WPF 控件渲染为位图,从中制作光标结构并使用 user32.dll/SetSystemCursor 进行设置
    • 专业版
    • 光标在鼠标之后没有延迟,因为它是真正的光标
    • CON
    • 捕捉非常困难,特别是因为我们有绝对和相对输入设备,我必须一直重置鼠标位置或使用 user32.dll/ClipCursor(System.Windows.Forms.Cursor.Clip 也是如此),但捕捉的光标是总是在捕捉位置周围晃动(试图逃跑,再次重置......)
    • 我使用的代码在随机时间后抛出奇怪的异常 - 所以我当前的代码似乎很不稳定
  • 将我自己的光标渲染为最大化的、最顶部的、允许透明的、windowstyle=none、不可见的窗口,并在鼠标之后手动移动光标(如 Canvas.SetLeft(cursor, MousePosition.X))
    • 专业版
    • 可以(轻松)完成捕捉
    • CON
    • 当鼠标点击并点击光标时,光标被点击而不是超出的窗口
    • 一直在调度程序背景循环中轮询鼠标位置对我来说似乎不是很漂亮

要解决第二种方法,我的光标必须在热点中至少有一个透明像素,以便鼠标可以点击……这对我来说似乎不是一个真正的解决方案……

有什么想法吗?

编辑:一些示例源来显示问题...:

示例应用程序和源来显示将鼠标捕捉到固定位置的问题:ClipIt.rar

随机时间后失败的示例应用程序和源 - 设置自绘光标:TryOwnCur.rar

可以在以下位置找到:http: //sourcemonk.com/Cursor

4

1 回答 1

0

感谢http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/a3cb7db6-5014-430f-a5c2-c9746b077d4f

我可以通过设置窗口样式来单击跟随鼠标位置的自绘光标:无,并且像我已经做过的那样允许透明,然后

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);
  }

并从 OnSourceInitialized 调用 makeTransparent...

于 2010-07-08T09:54:20.680 回答