2010-07-08 21 views
1

我需要實現一個光標與一些非常具體的功能:WPF:繪製自己的光標 - 平凡的問題

  • 它必須是動畫
    • 因爲n秒後自動點擊 - 這樣的動畫針對用戶反饋時,點擊會發生
  • 它捕捉到我們的一些控制
  • 它給我們申請的工作外ication

的方法至今:

  • 使我的WPF控制成位圖,使光標結構出來,並用user32.dll中/ SetSystemCursor設置它
    • PRO
    • 光標具有後鼠標沒有延遲,因爲它是一個真實光標
    • CON
    • 捕捉是相當困難的,尤其是因爲我們有絕對和相對inputdevices,我將不得不重置鼠標位置或使用user32.dll/ClipCursor(System.Windows.Forms.Cursor.Clip也是如此),但搶購光標始終圍繞着捕獲的位置搖晃(試圖逃跑,讓我們再重新....)
    • 我使用的代碼一些隨機的時間後拋出奇怪的例外 - 所以我現在的代碼似乎相當不穩定
  • 將我自己的光標渲染到最大化,最頂層,allowtransparent,windowstyle = none,不可見窗口並手動移動鼠標後的光標(如Canvas.SetLeft(cursor,MousePosition.X))
    • PRO
    • 捕捉可(容易)做
    • CON
    • 當鼠標點擊和打擊的光標,光標獲取的點擊並不會在窗口之外
    • 輪詢mouseposition在調度員 - 後臺循環中,我一直對我看起來並不很漂亮

要解決第二種方法,我的光標必須在熱點中至少有一個透明像素 ,以便鼠標可以點擊通過......這看起來不像是真正的解決方案......

任何想法的人?

編輯: 一些示例源來顯示的問題...:ClipIt:

示例應用&源用鼠標捕捉到一個固定的位置,以顯示該問題。RAR

示例應用&源隨機時間後失敗 - 設置一個自繪光標:TryOwnCur.rar

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

回答

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

and call makeTransparent from OnSourceInitialized ...