2011-11-15 7 views
24

Me gustaría tener el mismo efecto que la barra de tareas de Windows 7.
He buscado en esta pregunta: Keep Window Looking Active
Funciona muy bien, pero solo si la ventana tiene un área no cliente.¿Cómo puedo forzar a Aero a dibujar una ventana sin bordes como si estuviera activa, incluso si no lo está?

Mi ventana no tiene bordes y el contenido del mismo (solo un fondo negro) se muestra como está inactivo, haga lo que haga.

He configurado los indicadores de mi ventana como la barra de tareas de Windows 7, pero no me sirvió.

Mi único pensamiento en este momento es dibujarlo con bordes y simplemente cortarlos, ¿hay alguna manera mejor de lograr lo que quiero?

EDIT 1:
recorte no funcionó, después de cortar los bordes del contenido de la ventana se representa como ventana inactiva. ¿Cómo funciona la barra de tareas de Windows 7?

Edit2:
Adición de algunas fotos de explicar mejor a mí mismo, el siguiente contenido de la ventana es un fondo negro.

Eso es una ventana inactiva (el contenido se vuelve un poco oscuro): Inactive window

Eso es una ventana activa:
Active window

Si la ventana no tiene área de cliente el contenido es siempre representa como ventana inactiva sin embargo, la barra de tareas de Windows siempre se representa como una ventana activa y no tiene ningún área NC (al menos según spy ++). Eso es lo que intento imitar.

Edit3:
compartir mis descubrimientos recientes. ventana explorer.exe principal es sin marco y tiene las siguientes banderas: Explorer image parameters

Me zambullí en el proceso del explorador dwmapi.dll exportó funciones: Explorer dwmapi.dll exported functions

utiliza DwmEnableBlurBehindWindow, al igual que yo.
He comprobado las funciones ordinales no documentadas y ninguna de ellas está relacionada con la representación del aerocool como activo.

¿Podría ser que las reglas de DWM no se apliquen al explorador?

+0

¿Cómo se puede apreciar un borde inferior de la ventana es inactiva? – Dani

+0

Se agregaron algunas fotos para ser más claras. – Omer

+0

Escribí en el último párrafo "Si la ventana no tiene un área de cliente, el contenido siempre se muestra como una ventana inactiva", una ventana sin bordes se vería como inactiva, incluso si está activa. – Omer

Respuesta

2

Tricky one ..
establece NCRenderingPolicy en Habilitado con la API "DwmSetWindowAttribute".
http://msdn.microsoft.com/en-us/library/windows/desktop/aa969524(v=vs.85).aspx

[DllImport("dwmapi.dll", PreserveSig = false)] 
    public static extern int DwmSetWindowAttribute(IntPtr hwnd, int attr, ref int attrValue, int attrSize); 

    [Flags] 
    public enum DwmWindowAttribute 
    { 
     NCRenderingEnabled = 1, 
     NCRenderingPolicy, 
     TransitionsForceDisabled, 
     AllowNCPaint, 
     CaptionButtonBounds, 
     NonClientRtlLayout, 
     ForceIconicRepresentation, 
     Flip3DPolicy, 
     ExtendedFrameBounds, 
     HasIconicBitmap, 
     DisallowPeek, 
     ExcludedFromPeek, 
     Last 
    } 

    [Flags] 
    public enum DwmNCRenderingPolicy 
    { 
     UseWindowStyle, 
     Disabled, 
     Enabled, 
     Last 
    } 

    public static bool SetNCRenderingActive(IntPtr Handle) 
    { 
     int renderPolicy = (int)DwmNCRenderingPolicy.Enabled;    
     return (DwmSetWindowAttribute(Handle, (int)DwmWindowAttribute.NCRenderingPolicy, ref renderPolicy, sizeof(int) ) == 0); 
    } 
Cuestiones relacionadas