我希望与windows 7任务栏具有相同的效果
我看过这个问题:
Keep Window Looking Active
它工作得很好,但只有在窗口有非客户区域时才会有效。
我的窗口是无边框的,无论我做什么,它的内容(只是黑色背景)都会呈现为无效状态。
我将窗口标记设置为Windows 7任务栏,但它没有帮助。
我目前唯一想到的是用边框画它并剪辑它们,有没有更好的方法来达到我想要的效果?
编辑1:
剪切不起作用,剪切边框后窗口内容呈现为非活动窗口。
那么Windows 7任务栏到底如何运作呢?
EDIT2:
添加一些照片来更好地解释自己,以下窗口内容是黑色背景。
这是一个非活动窗口(内容呈现有点暗):
这是一个活跃的窗口:
如果窗口没有客户区,则内容始终呈现为非活动窗口,但Windows任务栏始终呈现为活动窗口,并且没有任何NC区域(至少根据spy ++)。这就是我想要模仿的东西。
EDIT3:
分享我最近的发现。
explorer.exe主窗口是无框架的,并具有以下标志:
我潜入了探险家的进程dwmapi.dll导出函数:
它使用DwmEnableBlurBehindWindow,就像我一样 我检查了未记录的序数函数,但没有一个与将空气玻璃渲染为活动状态有关。
可能是DWM规则不适用于资源管理器吗?
答案 0 :(得分:2)
整蛊...... 使用“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);
}