Pregunta

En cuanto a una ventana de la pista de clase tooltips de Windows, veo que extrae su sombra base fuera rectángulo real de la ventana de la pista.

Con SpyXX - puedo conseguir rect ventana de la información sobre herramientas y estilos de clase:

Rectangle:     (440, 229)-(544, 249), 104x20
Restored Rect: (440, 229)-(544, 249), 104x20
Client Rect:   (0, 0)-(104, 20), 104x20

Se dará cuenta de que la sombra que se ve es físicamente fuera de la ventana que se está elaborando. ¿Cómo se dibuja una sombra exterior alrededor de mi ventana, mientras que ser fuera mi ventana?

Nota: la sombra no se dibuja usando el estilo estándar de la clase CS_DROPSHADOW he confirmado experimentalmente, y también se puede ver el estilo de clase de la ventana en la SpyXX ; que no utiliza CS_DROPSHADOW:

Windows Styles:     94000001

    WS_POPUP        80000000
    WS_VISIBLE      10000000
    WS_CLIPSIBLINGS  4000000
    TTS_ALWAYSTIP          1

Extended Styles:    00080088

    WS_EX_LAYERED      80000
    WS_EX_TOOLWIN         80
    WS_EX_TOPMOST          8

Entonces, ¿cómo puedo sacar fuera de mi ventana?

Nota: Tratando de dibujar en el escritorio de CC está fuera. A partir de Greg Schechter redireccionante GDI, DirectX y aplicaciones WPF :

  

Dibujo y lectura de la pantalla   - baaaad

     

Por último, ya que estamos en la redirección   tema, uno particularmente peligroso   la práctica está escribiendo en la pantalla,   ya sea mediante el uso de GetDC (NULL)   y la escritura para que, o intentar   hacer XOR líneas de banda de caucho, etc.   son dos grandes razones por las que la escritura de   la pantalla es mala:

     

Es caro ... por escrito a la   pantalla en sí no es caro, pero   casi siempre está acompañada de   la lectura de la pantalla porque uno   normalmente no leer-modificar-escribir   operaciones XOR como al escribir a   la pantalla. La lectura desde el video   superficie de la memoria es muy caro,   requiere sincronización con el DWM,   y puestos de todo el tubo de GPU, como   así como el tubo de aplicación DWM.
  Es impredecible ... si de alguna manera   gestionar llegar al primario real   y escribir en él, no puede haber   previsibilidad en cuanto a cuánto tiempo lo que   escribió al primario permanecerá en   pantalla. Desde la UCE no sabe   al respecto, puede ser anulado en el   fotograma siguiente actualización, o puede persistir   durante mucho tiempo, dependiendo de   ¿Qué más necesita ser actualizado en el   pantalla. (Realmente no permitimos directa   escrito a la primaria de todos modos, para   esa misma razón ... si intenta   acceder a las primarias de DirectDraw, por   ejemplo, el DWM se apagará hasta   se cierra la aplicación que accede)

¿Fue útil?

Solución

No se puede dibujar fuera de su ventana de la manera que usted describe.

Si hace clic derecho sobre el escritorio y luego ir a propiedades / Apariencia / Efectos y desmarque 'Mostrar sombras bajo los menús' ... ya no tendrá la sombra.

El fondo es que este es un producto del gestor de ventanas no su programa.

Otros consejos

Q: ¿Cómo se dibuja exterior de una ventana? A: dibujar dentro de otro Ventana

Lo primero a destacar es que la clase información sobre herramientas realidad hace utiliza el estilo CS_DROPSHADOW - pero tenga en cuenta que este es un class estilo, no un Ventana estilo, por lo que tiene que mirar el Class pestaña en las propiedades de Spy ++ diálogo para encontrarlo. Vas a ver que las ventanas tooltips_class32 tiene de hecho esto -. Y algunos otros

Pero eso lleva a la siguiente pregunta - ¿cómo lo hace que trabajo? Pues bien, parece que Windows implementa mediante la creación de un ayudante HWND para dibujar la sombra - presumiblemente está creando otra ventana emergente del mismo tamaño y forma que el uno está sombreado, llenándolo de color gris, colocándolo directamente debajo de la ventana principal, y el ajuste como un WS_EX_LAYERED ventana para que la sombra puede ser transparente y fade out alrededor de los bordes utilizando alfa-mezcla. Y no hay nada que le impida el uso de las mismas o similares técnicas de sí mismo si desea añadir un tipo diferente de efecto de sombra a una de sus propias ventanas.

Así, larga historia corta: si desea dibujar fuera de su propia ventana, crear una ventana transparente ayudante en el área general que desea recurrir, y se basan en esa ventana de ayuda en vez .

-

Ahora, si se intenta encontrar una de estas ventanas ayudante de sombra en Spy ++, no encontrará mucho. A diferencia de las ventanas tooltip_class32, que son de larga vida y simplemente ocultar / mostrar a sí mismos como sea necesario, estas ventanas de sombra son una criatura más difícil de alcanzar: que sólo se crean durante el tiempo que sea necesario, por lo que tendría que actualizar Spy ++, mientras que hay una información sobre herramientas o el menú emergente u otra ventana usando la sombra presente - y eso es complicado, ya que la mayoría de la información de herramientas y menús desaparecerán tan pronto como se mueve el ratón para cambiar a Spy ++. Pero resulta que la información sobre herramientas en la barra de herramientas propia Spy ++ 's se quedarán: así que empieza Spy ++, coloca el cursor sobre un elemento de la barra de herramientas, y pulsa F5 para refrescar el árbol HWND mientras que la información sobre herramientas y sombras están presentes. Ahora se desplaza hacia abajo, y debería ver el tercer y cuarto HWNDs visibles en el árbol son la información de herramienta en sí, y justo después de eso, una ventana SysShadow. Por desgracia, ya que la información sobre herramientas y sombras tienen por ahora desaparecieron, si se intenta obtener el diálogo de propiedades que HWND, obtendrá un obtener un diálogo de propiedad en blanco con el mensaje de una 'ventana no válida'. Si realmente quiere hurgar y ver cómo funciona ese SysShadow, qué estilos que a su vez utiliza y así sucesivamente, se puede crear una aplicación de destino con un emergente de larga duración que utiliza CS_DROPSHADOW que entonces se puede explorar en Spy ++ en el ocio.

(Por último, tenga en cuenta que estas sombras son una cosa completamente diferente a las sombras que se ven cuando hay una ventana de aplicación es en la parte superior de la otra por encima de otro puesto de Vista: este tipo de sombra es parte del modo de Aero Glass y manejado por el mismo Desktop Manager Composición que se suma el efecto barra de título de vidrio, y no utiliza o necesita ventanas de ayuda para aplicar las sombras.)

No me sorprendería si esa sombra está íntimamente ligada al gestor de ventanas en sí; después de todo es el gestor de ventanas que decide lo ventana se pone a pintar piezas que de sí mismo y cuando que puede hacerlo. Yo no lo veo como un genio para pintar esa sombra si el control sobre todo lo que se gana, que tiene el gestor de ventanas.

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