Подтвердить что ты не робот

Как заставить Aero рисовать окно без полей, как если бы оно было активным, даже если оно не было?

Я хотел бы иметь тот же эффект, что и панель задач Windows 7. Я рассмотрел этот вопрос: Сохранить окно в активном режиме
Он отлично работает, но только если в окне есть неклиентская область.

Мое окно не имеет границ, и его содержимое (только черный фон) отображается, поскольку оно неактивно, независимо от того, что я делаю.

Я установил мои флаги окна так же, как панель задач Windows 7, но это не помогло.

Моя единственная мысль на данный момент состоит в том, чтобы нарисовать ее с помощью границ и просто закрепить их, есть ли лучший способ достичь того, что я хочу?

РЕДАКТИРОВАТЬ 1:
Обрезание не сработало, после обрезания границ содержимое окна отображалось как неактивное окно. Как, черт возьми, работает панель задач Windows 7?

EDIT2:
Добавление некоторых фотографий, чтобы лучше объяснить себя, следующее содержимое окна - черный фон.

Это неактивное окно (содержимое отображается темным): Inactive window

Это активное окно:
Active window

Если в окне нет клиентской области, содержимое всегда отображается как неактивное окно, однако панель задач Windows всегда отображается как активное окно и не имеет никакой области ЧПУ (по крайней мере, согласно шпиону ++). Это то, что я пытаюсь подражать.

EDIT3:
Разделите мои недавние открытия. Главное окно explorer.exe бескаркасное и имеет следующие флаги: Explorer image parameters

Я погрузился в исследовательский процесс dwmapi.dll экспортировал функции: Explorer dwmapi.dll exported functions

он использует DwmEnableBlurBehindWindow, как и я.
Я проверил недокументированные ординальные функции, и ни одна из них не связана с тем, чтобы сделать aero glass активным.

Не могут ли правила DWM применяться к проводнику?

4b9b3361

Ответ 1

Трюк один..
установите для NCRenderingPolicy значение Enabled с помощью 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);
    }