mfc controls transparency alphablending z-order

mfc - Creando control transparente personalizado



controls transparency (1)

Me arriesgaré. :-)

Esto debería darte todo lo que necesitas para lograr lo que creo que quieres.

Solución general para controles transparentes

En cuanto a los problemas de orden Z, el orden z no afecta la prioridad del mensaje. Necesitará publicar algún código para que podamos determinar qué está sucediendo allí.

Intento crear un control personalizado que muestre un mapa de bits con alphablend por píxel (como algunos de ustedes ya saben para otras preguntas).

En este momento estoy usando un control personalizado en el editor de recursos y lo adjunto a una clase derivada de CWnd. Cuando registro mi clase personalizada, configuré el hbrBackground de la estructura WNDCLASS en NULL_BRUSH para lograr la transparencia del control.

En el OnPaint del control, uso AlphaBlend para pintar el mapa de bits de mezcla alfa por píxel.

Esto funciona bastante bien pero tengo dos problemas:

  • Quiero cambiar el mapa de bits que se muestra cuando el mouse está sobre el control. Como el control es transparente, las áreas que un mapa de bits no están superpuestas por el otro mapa de bits no se borran. ¿Cómo puedo borrar el fondo cuando se cambia la imagen?

  • El segundo problema está relacionado con dos controles superpuestos. Mi control está pintado sobre otro control que tiene un gradiente (de hecho está dentro de otro control). El problema es que si pongo mi control antes en el orden z, los otros controles se superponen a mi control y el mío no se muestra. Si pongo el otro control antes en el orden z, no puedo obtener el mensaje del mouse bajo mi control.

Tal vez estoy haciendo algo mal o estoy equivocado en la forma en que estoy tratando de implementar mi control. Se agradece cualquier tipo de ayuda.

Gracias,

Javier