目前,我正在尝试使用自定义框架(使用DevExpress“SkinManager.EnableFormSkins
function)在Windows窗体中创建一个顶级窗口,并且在窗口周围仍然有阴影在Windows 7 Aero上运行。
目前窗口如下:
我希望它看起来像这样:
(即窗户周围有一个柔和的阴影)。
我做了大量研究和尝试错误,包括使用CS_DROPSHADOW
,asking the DevExpress support,reading on SO,other blogs和MSDN documentation。
但是,没有任何东西给我的窗户带来阴影。
虽然我认为我的要求根本无法实现,但我仍然想抓住机会并在此问问。
(我甚至想过通过在我的实际窗口后面放置一个原生的Aero窗口来伪造这个但是未能实现......)
我的问题是:
当Aero处于活动状态时,是否可以有一个带有自定义绘制的非客户端(NC)区域的窗口并且仍然会在此窗口周围出现阴影?
答案 0 :(得分:0)
你能尝试这样的自定义win形式阴影:
/// <summary>
/// Base class for drop shadows forms.
/// </summary>
public partial class DropShadowForm : Form
{
private const int CS_DROPSHADOW = 0x00020000;
/// <summary>
/// Creates new instance of DropShadowForm.
/// </summary>
public DropShadowForm()
{
InitializeComponent();
}
/// <summary>
/// Overrides from base class.
/// </summary>
protected override CreateParams CreateParams
{
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
get
{
CreateParams parameters = base.CreateParams;
if (DropShadowSupported)
{
parameters.ClassStyle = (parameters.ClassStyle | CS_DROPSHADOW);
}
return parameters;
}
}
/// <summary>
/// Gets indicator if drop shadow is supported
/// </summary>
public static bool DropShadowSupported
{
get
{
OperatingSystem system = Environment.OSVersion;
bool runningNT = system.Platform == PlatformID.Win32NT;
return runningNT && system.Version.CompareTo(new Version(5, 1, 0, 0)) >= 0;
}
}
}
答案 1 :(得分:0)
总结并结束我自己的问题,经过多方努力,我认为这根本不可能。
我所取得的成就是使用Locus Effects article中使用的技术来模拟阴影。
基本上使用透明窗口,动态使用alpha混合PNG作为模拟阴影,并在窗口的边(和角)周围绘制;移动透明窗口,当真实窗口移动等时
这样做效果很好,但对用户来说仍然看起来有点不专业,因为当其他窗口被激活而不像预期的那样,影子会消失掉。
所以我的结论是:用合理的努力是不可能的。