Ome*_*mer 24 windows aero windows-7 winforms
我想要与Windows 7任务栏具有相同的效果.
我已经看过这个问题:
保持窗口看起来很活跃
它很好但只有窗口有一个非客户区域.
我的窗口是无边框的,无论我做什么,它的内容(只是黑色背景)都会呈现为不活动状态.
我将窗口标志设置为Windows 7任务栏,但它没有帮助.
我现在唯一的想法就是用边框画它并剪掉它们,有没有更好的方法来实现我想要的?
编辑1:
剪切不起作用,剪切边框后,窗口内容呈现为非活动窗口.那么Windows 7任务栏到底有什么用呢?
EDIT2:
添加一些照片来更好地解释自己,以下窗口内容是黑色背景.
这是一个非活动窗口(内容呈现有点暗):
这是一个活跃的窗口:
如果窗口没有客户区,则内容总是呈现为非活动窗口,但是窗口任务栏总是呈现为活动窗口,并且它没有任何NC区域(至少根据spy ++).这就是我想要模仿的东西.
编辑3:
分享我最近的发现.explorer.exe主窗口是无框架的,并具有以下标志:
我潜入了探险家的进程dwmapi.dll导出函数:
就像我一样,它使用DwmEnableBlurBehindWindow.
我检查了未记录的序数函数,但没有一个与将空气玻璃渲染为活动状态有关.
可能是DWM规则不适用于资源管理器吗?
棘手的一个..
使用“DwmSetWindowAttribute”API 将 NCRenderingPolicy 设置为启用。
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);
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2544 次 |
最近记录: |