2012-08-28 19 views
0

我們的WPF應用程序中有一個用於顯示Direct3d圖形的HwndHost UIElement,我發現爲HwndHost UIElment設置遊標的唯一方法是調用Win32 API SetCursor()。我們所有的遊標都是託管程序集中的資源,我寧願不改變它,但我一直無法找到一種方法來通過像LoadImage()這樣的任何Win32 API來加載其中的一個遊標。如何使用帶WPF資源的Win32 SetCursor()和HwndHost

是否有人知道如何獲得一個句柄(hCursor)作爲託管程序集中的資源的遊標?

或者,還有另一種方法來設置顯示Direct3D圖形的HwndHost上的光標?

回答

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"
  • 確定/計算光標資源路徑在您的託管資源中
  • 通過使用GetManifestResourceStream
  • s訪問該光標的Stream s將二進制數據轉換爲臨時文件
    (例如,請使用FileStreamFileMode.Create,如果需要FileAttributes.Temporary
  • 使用LoadCursorFromFile從文件加載數據並創建一個可在SetCursor中使用的遊標句柄。
  • 清理臨時文件

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