WM_TOUCH не сразу отправляется с событием приземления - PullRequest
5 голосов
/ 26 сентября 2011

Я работаю с сенсорным экраном и использую встроенные в Windows 7 драйверы (так как мне никогда не предлагалось их устанавливать). это работает хорошо, за исключением одной маленькой проблемы. Когда я касаюсь экрана, он не отправляет WM_LBUTTONDOWN, пока я не уберу палец с экрана. Похоже, это делается для того, чтобы определить, намереваюсь ли я удерживать, чтобы эмулировать WM_RBUTTONDOWN или нет. (Кроме того, я пытался отключить жест эмуляции при удержании, но на практике это никогда не отключалось.)

Так что я думал, что просто получу сообщения WM_TOUCH. И я обнаружил, что WM_TOUCH (0x240) также не отправляется в мое окно, пока я не уберу палец с экрана. Я как бы подумала, что это полностью противоречит цели WM_TOUCH.

Как до, так и после регистрации для получения сообщений WM_TOUCH, я получил три сообщения сразу после прикосновения к экрану:

1. Send: 0x02CC (undocumented tablet messages)
2. Post: 0x011B (undocumented)
3. Send: 0x011A (WM_GESTURENOTIFY)

0x011A - это WM_GESTURENOTIFY, на который должен ответить мой код (возможно, я не отвечаю правильно?). Я отвечаю стандартным ответом (используя образец кода от MS) для получения полных уведомлений.

Другое дело, я начал получать WM_TOUCH, когда регистрируюсь для сенсорных сообщений, но я также продолжаю получать сообщение WM_GESTURENOTIFY. Согласно документации MS, когда я регистрируюсь, чтобы получить WM_TOUCH, я больше не получаю сообщения о жестах.

Если кто-нибудь может сказать мне, как получать сообщения WM_TOUCH немедленно (например, когда я получаю сообщения WM_GESTURENOTIFY), а не после того, как я отпущу палец от сенсорного экрана, я был бы очень признателен.

Ответы [ 2 ]

1 голос
/ 19 октября 2011

Я почти получил ту же проблему и решил ее, используя:

RegisterTouchWindow (hWnd, TWF_WANTPALM);

0 голосов
/ 12 апреля 2012

Ознакомьтесь с этим руководством по сенсорным событиям:

http://msdn.microsoft.com/en-us/gg464991

То, что вы хотите использовать, это функция RegisterTouchWindow, например:

RegisterTouchWindow(handle, 0);

Теперь Windows будет отправлять WM_TOUCH сообщения вместо WM_GESTURE сообщений в ваше окно.Имейте в виду, что для этого вам придется скомпилировать Windows SDK версии 7.0 или новее.

...