windows - transparentes - ¿Cómo puedo forzar a Aero a dibujar una ventana sin bordes como si estuviera activa, incluso si no lo está?
ventanas transparentes windows 10 2018 (1)
Complicado..
establezca 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);
}
Me gustaría tener el mismo efecto que la barra de tareas de Windows 7.
He mirado en esta pregunta: Mantener la ventana mirando activa
Funciona muy bien, pero solo si la ventana tiene un área no cliente.
Mi ventana no tiene bordes y el contenido de la misma (solo un fondo negro) se representa como inactivo, no importa lo que haga.
He configurado las banderas de mi ventana como la barra de tareas de Windows 7, pero no sirvió de nada.
Mi único pensamiento en este momento es dibujarlo con bordes y simplemente recortarlos, ¿hay una mejor manera de lograr lo que quiero?
EDITAR 1:
El recorte no funcionó, después de recortar los bordes, el contenido de la ventana se representó como ventana inactiva. ¿Cómo diablos funciona la barra de tareas de Windows 7 entonces?
EDIT2:
Agregando algunas fotos para explicarme mejor, el contenido de la siguiente ventana es un fondo negro.
Esa es una ventana inactiva (el contenido se muestra un poco oscuro):
Esa es una ventana activa:
Si la ventana no tiene área de cliente, el contenido siempre se representa como ventana inactiva, sin embargo, la barra de tareas de Windows siempre se muestra como ventana activa y no tiene ningún área de NC (al menos según spy ++). Eso es lo que estoy tratando de imitar.
EDIT3:
Compartiendo mis descubrimientos recientes. La ventana principal de explorer.exe no tiene marcos y tiene los siguientes indicadores:
Me sumergí en el proceso del explorador. Las funciones exportadas de dwmapi.dll:
utiliza DwmEnableBlurBehindWindow, igual que yo.
He comprobado las funciones ordinales no documentadas y ninguna de ellas está relacionada con la visualización del aero glass como activo.
¿Podría ser que las reglas de DWM no se aplican al explorador?