Предотвратить изменение фокуса окна - PullRequest
15 голосов
/ 05 мая 2009

Я пытаюсь помочь инвалиду с небольшим количеством кода, чтобы помочь ему легче играть в игру. Он ограничен трекболом и одной кнопкой.

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

У меня это работает, и я думаю (или надеюсь), что ему это понравится. Когда я тестировал, все работало довольно хорошо.

Я хочу добавить еще одну функциональность. Если он щелкает по моему контролю, я хочу отправить другой ход клавиш. Не проблема, я могу это сделать. Однако, когда я делаю это окно, фокус переключается с игры на мой контроль.

Я нашел это на MSDN:

http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/48737c2b-7e6f-4ade-ac1c-7dd2f5cc2b88/

Это работает, чтобы предотвратить активацию моего окна, но все равно приводит к тому, что игра теряет фокус. Я могу вернуть фокус игре, но я бы предпочел, чтобы она никогда не теряла фокус.

Я пишу на C # и WPF.

У кого-нибудь есть идеи, как вы можете это сделать?

Джон Фентон

Ответы [ 2 ]

2 голосов
/ 11 февраля 2011

Зацепите некоторые низкоуровневые зацепки мыши и клавиатуры, и вашему приложению не нужно будет красть фокус и возвращать его.

Взгляните на эту пасту простого WPF-приложения , которое основано на статье Стивена Туба .

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

Я понимаю, что копаю это в прошлом, но, надеюсь, кто-то найдет этот ответ полезным. Приветствую, и хорошо для вас, чтобы повернуть свое программирование, чтобы помочь человеку!

1 голос
/ 14 февраля 2011

Вы можете попробовать отменить событие PreviewLostKeyboardFocus, как упомянуто в этом блоге:

http://immortalratblog.blogspot.com/2008/03/canceling-keyboard-focus-change-in-wpf.html

Я предполагаю, что фокус теряется из-за симуляции нажатия клавиши?

...