Как заставить 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 применяться к проводнику?
Ответы
Ответ 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);
}