La Web del Programador: Comunidad de Programadores
 
    Pregunta:  12471 - COMO CAMBIAR EL ASPECTO DE UNA VENTANA
Autor:  Richer Gonzalez
Quisiera saber si alguna manera de cambiar el aspecto de una ventana.Ya que uno a veces se cansa de ver siempre una ventana cuadrada.Lo que quiero es cambiar la forma de la ventana es decir: redondo,triangulo o de cualquier otra forma.

Agraceceré sus repuestas.

  Respuesta:  Juan Mellado
¿Un aspecto más "cool" para las sosas ventanas? No hay problema.

El API de Windows permite definir la forma de la "región" ocupada por una ventana: rectángular, circular, en forma de estrella, ... lo que quieras.
Busca "Regions" en los ficheros de ayuda del Microsoft SDK Win32 de cualquier compilador o en la propia web de Microsoft.

Para ir abriendo boca, un ejemplillo con PowerBuilder:

1) Crea una ventana

2) Declara las siguientes funciones locales externas:

FUNCTION int GetWindowRgn(long hwnd, REF long hrgn) LIBRARY "user32.dll"
FUNCTION long CreateEllipticRgn(int xl, int yt, int xr, int tb) LIBRARY "gdi32.dll"
FUNCTION int SetWindowRgn(long hwnd, long hrgn, int redraw) LIBRARY "user32.dll"
FUNCTION int SetPropA(long hwnd, string prop, long data) LIBRARY "user32.dll"
FUNCTION long GetPropA(long hwnd, string prop) LIBRARY "user32.dll"
FUNCTION int DeleteObject(long hobject) LIBRARY "gdi32.dll"
FUNCTION long RemovePropA(long hwnd, string prop) LIBRARY "user32.dll"

3) Declara una variable de instancia:
Long il_hRgn = 0

4) Crea un botón y asígnale el siguiente código en el evento clicked:
Long ll_hWnd, ll_hRgn

ll_hWnd = Handle(Parent)
ll_hRgn = CreateEllipticRgn(50, 50, 250, 250)
GetWindowRgn(ll_hwnd, il_hRgn)
SetWindowRgn(ll_hWnd, ll_hRgn, 1)
SetPropA(ll_hWnd, "region", ll_hRgn)

5) Crea otro botón y asígnale el siguiente código en el evento clicked:
Long ll_hWnd, ll_hRgn

ll_hWnd = Handle(Parent)
ll_hRgn = GetPropA(ll_hWnd, "region")
RemovePropA(ll_hWnd, "region")
DeleteObject(ll_hRgn)
SetWindowRgn(ll_hWnd, il_hRgn, 1)

6) Ejecuta, pulsa el primer botón y ... ventana circular :-). Pulsa el segundo botón para restaurar la forma original.

Espero haberte ayudado.
Saludos, Juan