Я пытаюсь вызвать 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 : Этот парень интересовался использованием
AnimateWindow
с дочерними элементами управления, а не с окном верхнего уровня.
Бонусная болтовня
Я был просматривал через Form -> Show -> Visible -> SetVisibleCore
, когда я обнаружил эту ошибку:
protected virtual void SetVisibleCore(bool value)
{
try
{
HandleCollector.SuspendCollect();
//...snip...
}
finally
{
HandleCollector.ResumeCollect();
}
}
Приятно знать, что каждый может ввести эти тонкие ошибки.