我正在尝试像第一张图片一样在整个窗体上添加阴影,除了那是WPF而不是WinForm。现在,我想在winform上添加相同的阴影。

这就是我想要的。

不是这个。

最佳答案

在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 ...
}

但是,有几点警告...
  • 此标志仅在顶级窗口上有效。在Win32中,这意味着窗口重叠和弹出。它对子窗口(例如控件)没有影响。我以为我记得曾在某处听说过该限制已从Windows 8中删除,但我找不到确认该链接的链接,并且没有安装Windows 8进行测试。
  • 用户可能完全禁用了此功能。如果是这样,无论您如何要求它们都不会出现阴影。那是设计使然。您的应用程序不应尝试覆盖此请求。您可以通过P/调用 SystemParametersInfo 函数并传递SPI_GETDROPSHADOW标志来确定是否启用阴影。
  • Aero主题还在顶部窗口中添加了阴影。此效果与CS_DROPSHADOW分开并且不同,并且仅在启用Aero时有效。无法为单个窗口关闭和打开它。而且,由于Aero主题已从Windows 8中删除,因此永远不会有这些阴影。
  • 10-08 07:45
    查看更多