2011-05-18 10 views
5

Tengo una ventana transparente (creada con WS_EX_LAYERED) y me gustaría recibir eventos de mouse de las regiones cero alfa.
Por lo que sé, pude:¿Cómo se interceptan los eventos del mouse de una ventana transparente?

1) Use gancho ratón
2) Pintar el fondo con color casi totalmente transparente (que tiene una opacidad de 1)

Sin embargo, la primera solución es consume mucho tiempo y el segundo ralentizará mi tiempo de renderizado ya que mi ventana se extiende casi por todo el escritorio y la mayoría de los píxeles son completamente transparentes en este momento.

¿Hay alguna otra forma de recibir esos eventos de mouse?

+0

¿Necesita esta capacidad general en todo momento o solo en ciertos momentos (por ejemplo, cuando su ventana es la ventana activa). Si es el último, puedes capturar el mouse. –

+0

Otro problema con un gancho es que tienes que tener mucho cuidado de que tu ventana esté en la parte superior para que no robes los clics en otras ventanas. Tal vez sería útil si brindara más información sobre lo que está tratando de lograr. –

+0

Lo explicaré mejor, Estoy dibujando íconos PNG e intentando detectar si el mouse está moviendo esos ítems. Ahora la mayoría de los íconos tienen cero regiones alfa y cuando los cierro no recibo el evento WM_MOUSEMOVE porque las ventanas de sus contenedores son transparentes. – Omer

Respuesta

1

De acuerdo con MSDN:

prueba de posicionamiento de una ventana por capas es basado en la forma y la transparencia de la ventana . Esto significa que las áreas de la ventana con clave de color o cuyo valor alfa es cero dejarán pasar los mensajes del mouse . Sin embargo, si la ventana de capas tiene el estilo extendido WS_EX_TRANSPARENT ventana , la forma de la ventana por capas será ignorado y los eventos de ratón se pasará a otras ventanas debajo de la ventana de capas.

Sin embargo, en un nuevo hilo se podía obtener de forma continua las coordenadas del ratón con GetCursorPos y si la posición está dentro de uno de sus iconos (sin tener en cuenta, que es más de un píxel cero alfa dentro del icono) lo maneja . No demasiado mejor que el gancho

+0

ya, eventualmente usé el gancho, gracias por la ayuda de todos modos! – Omer

Cuestiones relacionadas