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);
}
}
それが機能しないことを除いて。
- フォームは表示中にアニメーションを使用しません
- 非表示中、フォームは画面から水平方向のスライドをアニメーション表示し、通常の方法で非表示にする前に再び表示されます
WinFormsと混合する正しい方法は何ですか?AnimateWindow
こちらもご覧ください
- .NET AnimateWindow : この男は同じ質問をしました。しかし、それは別のことを達成しようとしていたので、人々は彼の質問に答えるよりも、彼の問題を解決した.
- C# WinForms AnimateWindow の問題: この人物は
AnimateWindow
、トップレベル ウィンドウではなく、子コントロールを使用することに関心がありました。
ボーナスおしゃべり
このバグを発見したとき、私はを熟読していました:Form -> Show -> Visible -> SetVisibleCore
protected virtual void SetVisibleCore(bool value)
{
try
{
HandleCollector.SuspendCollect();
//...snip...
}
finally
{
HandleCollector.ResumeCollect();
}
}
誰もがこれらの微妙なエラーを持ち込む可能性があることを知ってうれしい.