Primero, estoy trabajando en Win32 con C++.

He estado tratando de implementar una ventana transparente con un niño de la ventana, que debe permanecer 100% opaco. Parece que los controles de niño no puede tener una opacidad mejor(menor) que el de los padres y si puedo hacer que mi padre 100% transparente, a continuación, mi hijo de control también hereda la transparencia.

Código que uso –

SetLayeredWindowAttributes(GetParent(parentWindowHwnd), 0, 0, LWA_COLORKEY, LWA_ALPHA); 

Alguna ayuda?

Por favor también la respuesta si no soy muy claro con mi pregunta.

3 Comentarios

  1. 4

    Usted no puede hacer esto por desgracia, hijo de windows, siempre tiene la misma opacidad como su padre. El Google Barra de herramientas de Escritorio había un truco para dar la ilusión de un cuerpo opaco cuadro de texto en un fondo translúcido. Ellos crearon dos de nivel superior de windows, uno de fondo y otro para el cuadro de texto. A continuación, se establece la ventana de fondo, como el propietario de la (no el padre) de la texbox. Que, a continuación, establecer el fondo como transparente. Es un poco de trabajo para conseguir la derecha, pero es la única manera de hacerlo sin la representación de la totalidad de la cosa por sí mismo, usando UpdateLayeredWindow.

    • Pregunta rápida: ¿cómo configurar la ventana de fondo, como el propietario de la texbox?
    • Sólo para actualizar, a partir de Windows 8 esto no es cierto ya. Ahora el niño puede ser en capas.
  2. 1

    Estoy seguro de que puede hacer al revés, es decir, una opaca ventana principal con un transparente niño de la ventana, por lo que la inversa también puede ser cierto. ¿Has probado la desconexión de la WS_EX_LAYERED bandera para el niño ventana y, a continuación, volver a dibujar para que sea completamente opaco de nuevo?

    //Remove WS_EX_LAYERED from the window styles
    SetWindowLong(hChildWnd, 
                  GWL_EXSTYLE,
                  GetWindowLong(hChildWnd, GWL_EXSTYLE) & ~WS_EX_LAYERED);
    
    RedrawWindow(hChildWnd, 
                 NULL, 
                 NULL, 
                 RDW_ERASE | RDW_INVALIDATE | RDW_FRAME | RDW_ALLCHILDREN);

    La página de MSDN en Capas De Windows también puede ayudar.

    • Lo intentaron, pero esto no funcionó.
    • Si no resuelven su problema, no la acepta como una respuesta.
    • Sí. Primeros días, cuando no entendía lo suficiente. Gracias.
  3. 0

    Usted no puede hacer que un niño de control menos transparente que el de sus padres. El enfoque habitual aquí es para dar a su ventana una forma irregular: no es un rectángulo. Esto es mucho más antigua que la transparencia alfa – Pensar acerca de una aplicación de reloj: usted puede hacer su ventana circular, si quería, incluso en windows 95.

    Esto podría realizarse mediante la función de API de Windows SetWindowRgn:

    Un simple (vb) ejemplo
    Los resultados de Google

Dejar respuesta

Please enter your comment!
Please enter your name here