Pregunta

Estoy trabajando en un proyecto heredado en VC++/Win32/MFC.Recientemente se convirtió en un requisito que la aplicación funcione en un tableta, y esto marcó el comienzo de una serie de nuevos problemas.He podido trabajar con y alrededor de estos temas, pero me queda uno en el que me vendrían bien algunas sugerencias de expertos.

Tengo un error particular que es inducido por el "levantamiento" del lápiz de la superficie activa.Básicamente, el cursor del mouse desaparece y luego reaparece cuando lo "presionas" nuevamente en la pantalla.

Tiene sentido que esto no esté contabilizado en la solicitud.no puedes elevar el cursor en una PC de escritorio.Entonces, lo que estoy buscando es una buena descripción general de lo que sucede (en términos de mensajes de Windows, etc.) cuando se produce el levantamiento.¿Esto se traduce solo en cambios de enfoque y eventos al pasar el mouse?Mi error parece implicar también cambios en el cursor (aunque puede que no esté relacionado con el levantamiento).Ciertamente, el "elevación" inesperado está alterando el estado de procesamiento de la herramienta de la aplicación.

Entonces las preguntas tangibles son:

  1. ¿Qué sucede cuando se produce un "levantamiento" del lápiz?¿Una prensa?
  2. ¿Qué llamadas API se pueden utilizar para detectar esto?¿Simplemente se traduce en mensajes estándar con indicadores/valores establecidos?
  3. ¿Cuál es una buena manera de probar/emular esto cuando su PC de desarrollo es una computadora de escritorio?¿Estoy volando a ciegas aquí?(Solo tengo acceso periódico a una tablet pc)
  4. ¿Qué representa el comportamiento correcto o las mejores prácticas para el reconocimiento del lápiz óptico de la tableta?

Gracias por su consideración, ee

¿Fue útil?

Solución

Como usuario de una tableta, puedo responder algunas de sus preguntas.

Primero:

No es muy fácil mantener el "enfoque del teclado" en una ventana cuando el lápiz tiene que salir de la ventana enfocada para presionar una tecla en el teclado virtual.

La mayoría de los teclados virtuales que he usado (el panel de entrada de la tableta de Windows y uno en Ubuntu) permiten que el programa en el que están escribiendo mantenga el "enfoque del teclado".

¿Qué sucede cuando se produce un "levantamiento" del lápiz?¿Una prensa?

En Windows, el valor de presión cae, pero fuera de eso no hay ningún evento.(No sé nada de Linux).

¿Qué llamadas API se pueden utilizar para detectar esto?¿Simplemente se traduce en mensajes estándar con indicadores/valores establecidos?

Como se mencionó anteriormente, si puede obtener el valor de presión, puede usarlo.

¿Cuál es una buena manera de probar/emular esto cuando su PC de desarrollo es una computadora de escritorio?¿Estoy volando a ciegas aquí?(Solo tengo acceso periódico a una tablet pc)

Cuando el lápiz se coloca en otro lugar, las coordenadas globales del puntero cambian, por lo que puede emular el movimiento repentino del puntero con cualquier cosa que le permita cambiar los valores globales del puntero.(La clase Robot en Java hace que esto sea bastante fácil).

¿Qué representa el comportamiento correcto o las mejores prácticas para el reconocimiento del lápiz óptico de la tableta?

Le recomiendo que lea lo que Microsoft tiene que decir; el sitio web de MSDN tiene varios artículos excelentes.(http://msdn.microsoft.com/en-us/library/ms704849(VS.85).aspx) Señalaré que el tamaño de los botones de sus aplicaciones hace una gran diferencia.

Espero que esto haya sido de ayuda.

Otros consejos

Según tengo entendido, no hay ningún evento de "elevación": el único evento ocurre cuando el lápiz vuelve a la pantalla más tarde.Por supuesto, esto depende de su controlador específico, etc.

Peor aún, el error que usted describe podría reproducirse con solo un mouse típico.Intente mover el mouse lo más rápido que pueda; es casi seguro que saltará varios píxeles a la vez.O incluso docenas o cientos, si tiene la configuración del mouse configurada para la velocidad más alta del puntero.Una actualización, el mouse podría estar en 100,100.La próxima actualización podría estar en 200.300.

En Windows, el valor de presión cae, pero fuera de eso no hay ningún evento.(No sé nada de Linux).

En Linux obtendrás "ProximityEvents"

Lo más probable es que estos eventos WT_PROXIMITY estén disponibles en Windows (consulte: http://www.wacomeng.com/devsupport/ibmpc/wacomwindevfaq.html )

@Greg: una aclaración: esta es una computadora portátil con tableta integrada y lápiz óptico incorporado.El dispositivo no tiene un teclado dedicado (es virtual en la pantalla táctil) y no es un dispositivo de entrada Wacom.Perdón por la confusion.

Parece que hay una SDK para Microsoft Windows XP Tablet PC Edition que puede tener la capacidad de obtener detalles especiales como presión.Sin embargo, sé que tiene que haber algún nivel de compatibilidad estándar con las aplicaciones existentes que no son compatibles con tabletas.Supongo que puedo intentar instalar Spy++ en la tableta e intentar filtrar mensajes/eventos específicos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top