WPF:独自のカーソルを描く - 非論的な問題
-
12-09-2020 - |
質問
私はいくつかの非常に具体的な機能を持つカーソルを実装する必要があります:
- アニメーションをする必要があります
- 自動的にクリックすると自動的にクリックすると、クリックするとアニメーションはユーザーのフィードバック
- それは私たちのコントロールのいくつかにスナップする必要があります
- アプリケーションの外で働く必要があります
これまでのアプローチ:
- 私のWPFコントロールをビットマップにレンダリングし、それからcursor-structを作成し、user32.dll / setSystemCursorを使用して設定する
- pro
- カーソルは、実際のカーソル 以降、マウスの後に遅延はありません。
- con
- スナップは、特に絶対的な入力デバイスと相対的な入力デバイスを持っていて、常にマウス位置をリセットするか、User32.dll / clipcursor(System.Windows.Furss.cursor.Clipは同じ)を実行する必要があります。スナップカーソルは常にスナップ位置を揺り動かしています(脱出しようとし、再びリセットされます....)
- 使用するコードは、ランダムな時間の後に奇妙な例外をスローします - 私の現在のコードは非常に不安定なようです
- pro
2番目のアプローチを解決するために私のカーソルは少なくとも1つの透明ピクセルを持たなければならないでしょう ホットスポットでは、マウスがクリックスルーできるように...それは私に本当の解決策のようには思われません...
誰かの誰か?
編集: 問題を表示するためのいくつかの例 -
例APP&SOURCEマウスを固定位置にスナップして問題を表示する:clipit.rar
ランダムな時間後に失敗したアプリケーションとソース - 自己描画カーソルを設定する:tryOnncur.rar
は次の下にあります。 http://sourcemonk.com/cursor
解決
HTTP://social.msdn.microsoft.com/forums/en-us/wpf/thread/a3cb7db7db6-5014-430F-A5C2-C9746B077D4F
マウス位置に続く私の自己描画カーソルをクリックすることができます ウィンドウスタイルの設定:なし、そしてallowtransparentすでにやったように その後
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を呼び出します...
所属していません StackOverflow