0

我们的 WPF 应用程序中有一个 HwndHost UIElement,用于显示 Direct3d 图形,我发现为 HwndHost UIElment 设置光标的唯一方法是调用 Win32 API SetCursor()。我们所有的游标都是托管程序集中的资源,我不希望更改它,但我无法找到一种方法来通过任何 Win32 API(如 LoadImage())加载其中一个游标。

有谁知道如何获取作为托管程序集中资源的游标的句柄(hCursor)?

或者,是否有另一种方法可以在显示 Direct3D 图形的 HwndHost 上设置光标?

4

1 回答 1

1

我之前在这种情况下使用的技术是:

DllImport("user32.dll", EntryPoint = "LoadCursorFromFileW", CharSet = CharSet.Unicode)
public static extern IntPtr LoadCursorFromFile(String str);

...save your cursor into a temporary file...

IntPtr hCursor = DllImport.LoadCursorFromFile(sFilename);

...use hCursor in the SetCursor...
  • 确保将光标.cur文件添加到您的项目中"Embedded Resource"
  • 确定/计算托管资源中光标的资源路径
  • 通过使用访问该Stream游标GetManifestResourceStream
  • 将该二进制数据保存到一个临时文件中
    (例如,如果需要,可以使用和FileStream使用)FileMode.CreateFileAttributes.Temporary
  • 用于LoadCursorFromFile从文件中加载数据并创建一个光标句柄,然后您可以在 SetCursor 中使用该句柄。
  • 清理临时文件

http://support.microsoft.com/kb/319292

于 2012-08-28T10:40:14.233 回答