c# - 在无边界 WinForm 上投影

标签 c# vb.net winforms dropshadow

我正在尝试像第一张图片一样在整个窗体周围放置阴影,只是那是 WPF,而不是 WinForm。现在我想在 winform 上放置相同的阴影。

这就是我想要的......

Windows Form Shadow

不是这个..

Windows Form Shadow

最佳答案

在 WinForms 中,您可以覆盖表单的 protected CreateParams 属性并添加 CS_DROPSHADOW标志类样式。例如:

public class ShadowedForm : Form {
    protected override CreateParams CreateParams {
        get {
            const int CS_DROPSHADOW = 0x20000;
            CreateParams cp = base.CreateParams;
            cp.ClassStyle |= CS_DROPSHADOW;
            return cp;
        }
    }

    // ... other code ...
}

但是,有几点需要注意……

  1. 此标志仅适用于顶层窗口。在 Win32 中,这意味着重叠和弹出窗口。它对子窗口(例如控件)没有影响。我记得我曾在某处听说此限制已从 Windows 8 中删除,但我找不到确认这一点的链接,而且我没有安装 Windows 8 进行测试。

  2. 用户可能完全禁用了此功能。如果是这样,无论您如何要求,您都不会得到阴影。这是设计使然。您的应用程序不应尝试覆盖此请求。您可以通过 P/调用 SystemParametersInfo 来确定是启用还是禁用阴影。函数并传递 SPI_GETDROPSHADOW 标志。

  3. Aero 主题还为顶级窗口添加了阴影。此效果与 CS_DROPSHADOW 不同且不同,并且在启用 Aero 时起作用。无法为单个窗口关闭和打开它。此外,由于 Aero 主题已从 Windows 8 中删除,因此不会再有这些阴影。

关于c# - 在无边界 WinForm 上投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493698/

相关文章:

c# - 将巨大的 longs 数组写入磁盘

c# - 如何获取本地Windows帐户的到期日期?

vb.net - 使用 System.IO.StreamWriter 写入另一行

c# - 为 C# 中的接口(interface)自动创建 stub 属性?

c# - 显卡适配器的 PNPDeviceID 是否唯一?

c# - 在 DataGridView 中对日期进行排序

c# - 如何获取鼠标在某个控件上的位置

c# - ASP.NET MVC3 角色

c# - 如何使用 Moq 提供方法实现?

vb.net - ReportViewer.LocalReport.Render ("PDF")