我正在尝试调用
这里是 Win32 的翻译 副本:
很高兴知道每个人都可以引入这些微妙的错误。
AnimateWindow
来为 WinForms 窗口的显示和隐藏添加动画效果。这里是 Win32 的翻译 副本:
private static class NativeMethods
{
public const int AW_ACTIVATE = 0x20000;
public const int AW_HIDE = 0x10000;
public const int AW_BLEND = 0x80000;
public const int AW_CENTER = 0x00000010;
public const int AW_SLIDE = 0X40000;
public const int AW_HOR_POSITIVE = 0x1;
public const int AW_HOR_NEGATIVE = 0X2;
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int AnimateWindow(IntPtr hwand, int dwTime, int dwFlags);
}
但问题在于如何将对 AnimateWindow
的调用嵌入到 WinForms 方案中。有人建议在 OnLoad 中实现:
protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);
AnimateWindow(this.Handle, 200, AW_ACTIVATE | AW_HOR_NEGATIVE | AW_SLIDE);
}
和 OnClosing:
protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
base.OnClosing(e);
if (e.Cancel == false)
{
AnimateWindow(this.Handle, 200, AW_HIDE | AW_HOR_POSITIVE | AW_SLIDE);
}
}
除了它不起作用。
- 表单在出现时不使用任何动画
- 在隐藏期间,表单会水平滑动屏幕,然后重新出现,然后以正常方式隐藏
如何正确地将 AnimateWindow
与 WinForms 混合使用?
另请参阅
- .NET AnimateWindow:这位用户提出了相同的问题。但由于他试图实现其他功能,人们解决了他的问题而不是回答他的问题。
- C# WinForms AnimateWindow issue:这位用户对在子控件中使用
AnimateWindow
感兴趣,而不是在顶层窗口中使用。
额外闲聊
我正在浏览表单 -> 显示 -> 可见性 -> SetVisibleCore
时,发现了这个错误:
i was perusing through the Form -> Show -> Visible -> SetVisibleCore
, when i discovered this bug:
protected virtual void SetVisibleCore(bool value)
{
try
{
HandleCollector.SuspendCollect();
//...snip...
}
finally
{
HandleCollector.ResumeCollect();
}
}
很高兴知道每个人都可以引入这些微妙的错误。