- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我喜欢在 C# 中让我的表单无边框。所以我使用了这段代码:
FormBorderStyle = FormBorderStyle.None;
但它消除了 windows 8 的 aero 效果。窗体突然像眨眼一样打开。
如何恢复气动效果?
最佳答案
我正在使用 the C++ reference 回答我自己的问题我写了一个继承自Form Class的类。应用程序中的每个表单都应继承自此类而不是表单类。
public class AeroForm : Form
{
int _w = 100, _h = 100;
bool aero = false;
[StructLayout(LayoutKind.Sequential)]
struct MARGINS { public int Left, Right, Top, Bottom; }
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern void DwmExtendFrameIntoClientArea
(IntPtr hwnd, ref MARGINS margins);
[DllImport("dwmapi.dll", PreserveSig = false)]
static extern bool DwmIsCompositionEnabled();
public AeroForm()
{
aero = IsCompositionEnabled();
}
public AeroForm(int width, int height)
: this()
{
_w = width;
_h = height;
Size = new Size(width, height);
}
protected override void WndProc(ref Message m)
{
const int WM_NCCALCSIZE = 0x0083;
switch (m.Msg)
{
case WM_NCCALCSIZE:
if (aero)
return;
break;
}
base.WndProc(ref m);
}
//this is for checking the OS's functionality.
//Windows XP does not have dwmapi.dll
//also, This corrupts the designer...
//so i used the Release/Debug configuration
bool IsCompositionEnabled()
{
#if !DEBUG
return File.Exists(Environment.SystemDirectory + "\\dwmapi.dll")
&& DwmIsCompositionEnabled();
#else
return false;
#endif
}
//this one is used for a shadow when aero is not available
protected override CreateParams CreateParams
{
get
{
const int CS_DROPSHADOW = 0x00020000;
const int WS_MINIMIZEBOX = 0x20000;
const int CS_DBLCLKS = 0x8;
CreateParams cp = base.CreateParams;
if (!aero)
cp.ClassStyle |= CS_DROPSHADOW;
cp.Style |= WS_MINIMIZEBOX;
cp.ClassStyle |= CS_DBLCLKS;
return cp;
}
}
//this is for aero shadow and border configurations
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
if (aero)
{
FormBorderStyle = FormBorderStyle.FixedSingle;
ControlBox = false;
MinimizeBox = false;
MaximizeBox = false;
Size = new Size(_w, _h);
MARGINS _glassMargins = new MARGINS()
{
Top = 5,
Left = 5,
Bottom = 5,
Right = 5
};
DwmExtendFrameIntoClientArea(this.Handle, ref _glassMargins);
}
else
FormBorderStyle = FormBorderStyle.None;
}
//When you minimize and restore, the size will change.
//this override is for preventing this unwanted resize.
protected override void OnPaint(PaintEventArgs e)
{
if (aero)
Size = new Size(_w, _h);
base.OnPaint(e);
}
}
使用 Show() 和 Application.Run() 效果很好!但是当使用 ShowDialog() 打开表单时,它有一些回归。关闭表单,您会看到一个边框,该边框会在您的客户端内容隐藏后关闭。
关于c# - FormBorderStyle.None 去除windows 8原生打开效果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24641829/
我有一个无边框表单(FormBorderStyle = None),高度为 23 像素(在设计器中设置) 当 .NET 在运行时绘制我的表单时 - 它绘制它 38 像素高(由于某种原因,它增加了标题栏
我喜欢在 C# 中让我的表单无边框。所以我使用了这段代码: FormBorderStyle = FormBorderStyle.None; 但它消除了 windows 8 的 aero 效果。窗体突然
在 WindowsCE 平台(自定义构建)上,我们的 C# gui 使用常规形式来显示“弹出菜单”。我们将 FormBorderstyle 设置为 None 因为我们不希望表单控件可见。 一些客户在一
我有一个使用 FormBorderStyle 设置为“无”的表单的应用程序。 问题在于,如果用户点击“显示桌面”按钮(有效地最小化所有打开的窗口),然后从任务栏恢复其中一个表单,所有无边框表单都将恢复
令我恼火的是,我 promise 会提供一个用户无法调整大小的固定窗口,但他们当然可以双击标题栏来最大化这个“不可调整大小”的窗口。我怎样才能关闭它?我可以使用 winforms 代码来完成,还是必须
我有一个表单,其属性 FormBorderStyle 设置为“无”,并在顶部有一个用于拖动和按钮的自定义栏。 现在我想给表单一个边框,因为它是一个子表单,并且父表单与子表单具有相同的背景颜色,因此很难
我有一个 Windows 窗体项目的问题,我只能在 Windows 10 机器上重现它(在 Windows 7 上它确实有效)。我认为我可以隔离问题的根源,也就是说,如果我打开双缓冲并将 FormBo
这个问题在这里已经有了答案: Make a borderless form movable? (20 个答案) Winforms - Click/drag anywhere in the form
我将 winform 显示为对话框(在主窗口上使用 ShowDialog)。因此,我将 FormBorderStyle 设置为 None,因为我既不想要控制框也不想要标题栏。虽然,我想画一个边框(例如
我是一名优秀的程序员,十分优秀!