1

非常に特殊な機能を備えたカーソルを実装する必要があります。

  • それはアニメ化する必要があります
    • n 秒後に自動的にクリックされるため、アニメーションはクリックが発生したときのユーザーへのフィードバックです
  • 一部のコントロールにスナップする必要があります
  • アプリケーションの外で動作する必要があります

これまでのアプローチ:

  • 私のWPFコントロールをビットマップにレンダリングし、それからカーソル構造を作成し、user32.dll/SetSystemCursorを使用して設定します
    • プロ
    • カーソルは実際のカーソルであるため、マウスの後に遅延はありません
    • コン
    • 特に絶対入力デバイスと相対入力デバイスがあり、常にマウス位置をリセットするか、user32.dll/ClipCursor (System.Windows.Forms.Cursor.Clip は同じことを行います) を使用する必要があるため、スナップは非常に困難ですが、スナップされたカーソルは常にスナップ位置を中心に揺れる (逃げようとして、再びリセットされる....)
    • 私が使用するコードは、ランダムな時間の後に奇妙な例外をスローするため、現在のコードは非常に不安定に見えます
  • 自分のカーソルを最大化、最上位、allowtransparent、windowstyle = none、非表示のウィンドウにレンダリングし、手動でマウスの後にカーソルを移動します (Canvas.SetLeft(cursor, MousePosition.X) など)。
    • プロ
    • スナップは(簡単に)行うことができます
    • コン
    • マウスをクリックしてカーソルをヒットすると、カーソルがクリックされ、ウィンドウの向こうではありません
    • ディスパッチャーバックグラウンドループで常にマウス位置をポーリングすることは、私にはあまり美しくありません

2番目のアプローチを解決するには、マウスをクリックできるように、ホットスポットに少なくとも1つの透明なピクセルが必要です...それは私には本当の解決策のようには思えません...

アイデアは誰ですか?

編集:問題を示すためのサンプルソース...:

マウスを固定位置にスナップする際の問題を示すアプリとソースの例: ClipIt.rar

ランダムな時間の後に失敗するアプリとソースの例 - 自己描画カーソルの設定: TryOwnCur.rar

http://sourcemonk.com/Cursorの下にあります。

4

1 に答える 1

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

そして、OnSourceInitialized から makeTransparent を呼び出します...

于 2010-07-08T09:54:20.680 に答える