如何使用Win32 SetCursor()与WPF资源和HwndHost

时间:2012-08-28 03:36:27

标签: wpf winapi cursor resourcedictionary hwndhost

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

有没有人知道如何获取一个句柄(hCursor)到一个托管程序集中的资源?

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

1 个答案:

答案 0 :(得分: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.Create,如果需要FileAttributes.Temporary
  • 使用LoadCursorFromFile从文件加载数据并创建一个光标句柄,然后可以在SetCursor中使用。
  • 清理临时文件

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

相关问题