WPF: нанесение собственного курсора - нетривиальная проблема

StackOverflow https://stackoverflow.com/questions/3201775

Вопрос

Мне нужно реализовать курсор с некоторыми очень особенными функциями:

    .
  • это должно быть анимировано
      .
    • потому, что после n секунд он автоматически нажимает - поэтому анимация - обратная связь для пользователя, когда щелчок произойдет
  • Это должно привязать к некоторым нашим элементам управления
  • Это должно работать за пределами нашего приложения

Подходы пока:

    .
  • рендерируйте мой wpf-control в растровое изображение, сделайте курсор-структуру из него и используйте User32.dll / setsystemcursor, чтобы установить его
      .
    • pro
    • курсор не имеет задержки после мыши, так как это настоящий курсор
    • con
    • inkappt довольно сложно, тем более, что у нас есть абсолютные и относительные ввода данных, и мне пришлось бы сбросить мыши на вершине все время или использовать user32.dll / clipcursor (system.windows.forms.cursor.clip делает то же самое), но Синхровал курсор всегда встряхнул вокруг нажатой положении (пытается сбежать, снова получить сброс ....)
    • Код, который я использую, бросает странные исключения после какого-то случайного времени - поэтому мой текущий код кажется довольно нестабильным
  • Визуализируйте свой собственный курсор в максимально, самого верхнее, utressTransparent, windowstyle= none, невидимое окно и вручную перемещают курсор после мыши (например, chanvas.setleft (курсор, мыши напор .x))
      .
    • pro
    • Щит может быть (легко) сделано
    • con
    • Когда мышь нажимает на курсор, курсор получают нажатие, а не окно за пределами
    • Опрос на вершине мыши на фоне диспетчера-фона все время не кажется очень красивым для меня

Чтобы решить второй подход, мой курсор должен иметь хотя бы один прозрачный пиксель В точке доступа, чтобы мышь можно щелкнуть ... это не похоже на реальное решение для меня ...

Любая идея никого?

Редактировать: какой-то пример источника, чтобы показать проблемы ...:

Пример приложения и источника, чтобы показать проблему с щелчкой мыши в фиксированную позицию: CINIT.RAR

Пример приложения и источника, который не удается после случайного времени - установка самозагонного курсора: tryworncur.rar

можно найти под: http://sourcemonk.com/cursor

Это было полезно?

Решение

Благодаря http://social.msdn.microsoft.com/forums/en-us/wpf/thrad/a3cb7db6-5014-430f-a5c2-c9746b0c2-c9746b077d4f

Я могу нажать через мой самозагонный курсор, который следует за помощью к положению мыши Установка в стиле окна: нет, а utressTransparent, как я уже сделал и Тогда

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

и позвонить Maketransparent от OnsourceInitializalized ...

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top