【问题标题】:Custom mouse cursor size in WPFWPF中的自定义鼠标光标大小
【发布时间】:2013-09-15 14:14:28
【问题描述】:

我们正在开发一个应用程序,该应用程序必须供可能有视觉问题的人使用,涉及使用 kinect 移动光标,因此我们需要将其做得比平时更大。但是,这个应用程序不直接与 kinect 接口,所以我们不能使用它的 API。

我们正在使用 WPF 在 C# (.NET 4.5) 中进行编程。问题是默认光标大小不能大于 32x32 像素或高分辨率设备中的 64x64 像素。

我们首先尝试使实际的鼠标光标不可见,然后使用 Graphics 对象,使用 Graphics.FromHwnd(applicationWindowHandler) 获取。它成功绘制了图像,但它留下了过去光标位置的痕迹。

有没有办法使用常规的 windows 鼠标光标,或者至少有办法删除轨迹(比如强制刷新当前窗口的“无效”方法)?

我们已经尝试了这些解决方案,但没有成功:

www.hsys.com/CustomCursorArticlePart1.htm

www.hsys.com/CustomCursorArticlePart2.htm

csharparticles.blogspot.it/2005/03/custom-drawing-cursors.html

【问题讨论】:

  • 您使用的是 Cursor="None" 还是 ForceCursor="None"?如果我使用其中一个,我看不到任何痕迹。
  • 如果“图标”实际上是鼠标光标,您将看不到任何痕迹。但是你不能让它大于 32x32 或 64x64。如果您使用从 WPF 主窗口获取的 Graphics 对象来绘制跟随鼠标坐标的自定义图像(隐藏真正的鼠标光标),那么您就有了踪迹

标签: c# .net wpf kinect mouse-cursor


【解决方案1】:

难道你不能只使用一个覆盖整个窗口的 Canvas 控件,将光标设置为 none,然后在 Canvas 中放置一个带有适当大光标图像的 Image 控件,并将其 Left 和 Top 属性绑定到光标的 X和相对于 Canvas 的 Y 坐标??

【讨论】:

  • 是的,我们试过了,但有两个主要问题:1-在我们的主窗口中,我们只使用相对位置(和 Canvas,afaik,使用绝对定位),2-一旦我们将整个内容包装在一个 Canvas,每个子组件似乎都放大了,就像一个缩放效果(这很奇怪)
  • 这很奇怪,但为什么要将所有内容都包装在 Canvas 中呢?为什么不创建一个网格,将您的内容放入其中,最后是 Canvas(也在网格中),或者给它一个高 Grid.ZIndex 值,以便它始终呈现在您的内容之上。内容不必在画布中,画布只需在它前面。其次:为什么不只使用绝对位置作为图像的位置,而使用相对位置作为其余位置?
  • 我们尝试了您的解决方案,效果也不错,但我们选择使用 Uwe 建议的教程,因为直接替换鼠标光标可以减少延迟并提高性能!但无论如何,谢谢你的 cmets 真的帮助了我们:)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-07
  • 1970-01-01
  • 2011-07-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多