Как WPF получает сенсорный ввод?

Я работаю с WPF (С#, Windows 7, .NET 4.0) и его сенсорными событиями. При этом мне в голову пришел вопрос: как именно wpf получает сенсорный ввод? В статье msdn Обзор архитектуры сказано что «приложение» получает ввод через сообщения WM_TOUCH, но я не смог найти информацию о том, сколько лет этой статье (и, следовательно, применимо ли это к WPF). Также читаю (например, здесь), что вы не можете получать сообщения о жестах в приложении WPF.

Итак, преобразует ли WPF сенсорные сообщения внутри, а затем представляет их программисту через сенсорные события, такие как «TouchDown»? Почему вы не можете получить доступ к сообщениям, если это так? Есть ли официальный источник, в котором прямо указано, как WPF получает сенсорный ввод?


person KArlk.    schedule 21.04.2015    source источник
comment
Ознакомьтесь с разделом Касание и манипулирование в разделе < статья href="https://msdn.microsoft.com/en-us/library/ms754010.aspx" rel="nofollow noreferrer">Обзор ввода в MSDN.   -  person Clemens    schedule 21.04.2015
comment
@Clemens Может быть, я недостаточно ясно выразился в своем вопросе, я хочу знать, как элемент WPF получает информацию, необходимую для создания события. В статье, на которую вы ссылаетесь, объясняется только то, что происходит, если элемент WPF вызывает событие и как на него реагировать. Если я не правильно понял статью, и она действительно отвечает на мой вопрос, пожалуйста, уточните, где скрыта информация. :)   -  person KArlk.    schedule 21.04.2015


Ответы (1)


Я считаю, что вы говорите больше о «физике» сенсорного устройства. Как WPF получает ввод с сенсорного экрана?

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

Если вы действительно хотите знать, как WPF получает входные данные, вы можете использовать превосходный инструмент ILSpy и углубиться в System. Класс Windows.Input.Touch

Вы можете увидеть больше информации здесь о механизме сенсорного экрана.

Кстати, в отличие от одноточечного ввода с помощью мыши, сенсорный ввод является многоточечным. И WPF вызывает такие события, как TouchEnter , TouchLeave, TouchMove, TouchUp, TouchDown и т. д., а TouchEventArgs дает вам информацию о позиции и границах касания.

person ANewGuyInTown    schedule 21.04.2015
comment
Ну, не совсем так. Я хочу знать, использует ли WPF те же сообщения (WM_TOUCH и WM_GESTURE), которые вы можете использовать в Winforms (через Pinvoke). Вы, кажется, предполагаете, что это так, но я хотел бы иметь какую-то страницу msdn или что-то еще, что четко указывает на это как на факт. - person KArlk.; 21.04.2015
comment
то, что вы спрашиваете, является довольно низким уровнем и открыто не обсуждается Microsoft, однако вы можете увидеть эту статью о приложении Windows Touch. [программное обеспечение. intel.com/en-us/articles/ . Приложение Windows вызывает вызов API низкого уровня, в основном используя эти три набора сообщений; WM_POINTER, WM_TOUCH и WM_GESTURE. Поскольку WPF работает только в ОС Windows и требует полной платформы .net, я почти уверен, что он также должен идти по тому же маршруту и ​​выполнять эти вызовы под капотом. - person ANewGuyInTown; 21.04.2015
comment
Обратите внимание, что WM_POINTER работает только в Windows 8, а поскольку WPF работает как в Windows 7, так и в 8. WPF должен использовать только WM_TOUCH и WM_GESTURE. - person ANewGuyInTown; 21.04.2015
comment
Это типа проблема. Это все довольно расплывчато, и я хотел окончательный ответ. Но все равно спасибо за уделенное время! - person KArlk.; 22.04.2015
comment
Без проблем . Я дам вам знать, если увижу что-то определенное. - person ANewGuyInTown; 22.04.2015