窗口 – 如何强制Aero绘制无边框窗口,就像它是活动的,即使不是?

我想要有与Windows 7的任务栏相同的效果。
我看过这个问题:
Keep Window Looking Active
它工作伟大,但只有当窗口有一个非客户区。

我的窗口是无边框的,它的内容(只是一个黑色的背景)被渲染,因为它是无效的,无论我做什么。

我设置我的窗口标志只是作为Windows 7任务栏,但它没有帮助。

我目前唯一的想法是绘制边框,只是剪辑他们,有没有更好的方式来实现我想要的?

编辑1:
剪切不工作,剪切边框后,窗口内容呈现为非活动窗口。
那么Windows 7的任务栏是如何工作的呢?

EDIT2:
添加一些照片来更好地解释自己,以下窗口内容是黑色背景。

这是一个非活动窗口(内容呈现为黑暗):
  

这是一个活动窗口:
  

如果窗口没有客户区域,内容总是呈现为非活动窗口,但是Windows任务栏总是呈现为活动窗口,并且没有任何NC区域(至少根据间谍)。这就是我想模仿。

编辑3:
分享我最近的发现。
explorer.exe主窗口是无框的,并有以下标志:

我陷入了explorer的进程dwmapi.dll导出函数:

它使用DwmEnableBlurBehindWindow,就像我一样。
我检查了未记录的序数函数,没有一个与将航空玻璃作为活动有关。

难道DWM规则不适用于探险家吗?

最佳答案
棘手一..
使用“DwmSetWindowAttribute”API将NCRenderingPolicy设置为Enabled。
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);
    }

转载注明原文:窗口 – 如何强制Aero绘制无边框窗口,就像它是活动的,即使不是? - 代码日志