我正在尝试像第一张图片一样在整个窗体周围放置阴影,只是那是 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 中删除,因此不会再有这些阴影。
关于c# - 在无边界 WinForm 上投影,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16493698/