Предотвращение изменения фокуса окна
Я пытаюсь помочь инвалиду с небольшим количеством кода, чтобы помочь ему играть в игру легче. Он ограничен трекболом и одной кнопкой.
В настоящее время он использует экранную клавиатуру и ему удалось играть в другие игры, используя его. Я создал небольшой код, чтобы попытаться сделать его жизнь проще. Он использует кнопки наведения для клавиш. Когда указатель мыши входит в эту кнопку, он посылает ключ вниз, когда он отходит от кнопки, он отправляет ключ вверх.
У меня есть работа, и я думаю (или надеюсь) ему понравится. Он работал очень хорошо, когда я тестировал его.
Я хочу добавить к нему еще одну функциональность. Если он нажимает на мой контроль, я хочу отправить другой ключевой штрих. Не проблема, я могу это сделать. Однако, когда я делаю это окно, фокус переходит из игры в мой контроль.
Я нашел это на MSDN:
http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/48737c2b-7e6f-4ade-ac1c-7dd2f5cc2b88/
Это работает, чтобы не активировать мое окно, но оно все еще заставляет игру терять фокус. Я могу настроить фокус обратно в игру, но я бы предпочел, чтобы он просто не терял фокус.
Я кодирую в С# и WPF.
У кого-нибудь есть идеи о том, как вы можете это сделать?
Джон Фентон
Ответы
Ответ 1
Возьмите крючки с мышью и клавиатурой низкого уровня, и вашему приложению не понадобится красть фокус и вернуть его.
Посмотрите это пасти простого приложения WPF, которое в значительной степени основано на статья Стивена Тууба.
Всякий раз, когда вы оставляете клик, в любом месте, отправляется второй щелчок левой кнопкой мыши, поэтому вы эффективно удваиваете клик. Вы можете достичь своей цели, скрывая свое приложение, когда пользователь нажимает, так что ваше приложение никогда не крадет фокус. Затем определите местоположение щелчка и определите, была ли нажата одна из ваших кнопок, и действуйте соответственно.
Я понимаю, что я выкапываю это из прошлого, но, надеюсь, кто-то найдет этот ответ полезным. Приветствия, и хорошо для вас, чтобы превратить ваше программирование в помощь другому человеку!
Ответ 2
Вы можете попробовать отменить событие PreviewLostKeyboardFocus как упоминание в этом блоге:
http://immortalratblog.blogspot.com/2008/03/canceling-keyboard-focus-change-in-wpf.html
Я предполагаю, что фокус потерян, имитируя нажатие клавиши?