我试图做一个通知窗口,当你收到新的电子邮件如Outlook使用。 我有上面有两个Label控件的通知窗口显示通知信息模式窗体。 要获得淡入效果,我是P /调用Win32的AnimateWindow功能。 一切似乎除了一件事好吗工作。
当我的P / Invoke AnimateWindow,在Label控件的文本形式的调查后的动画效果是在刚刚出现。 我想它逐渐与表格的其余部分褪色英寸 我怀疑它是与当表单更新其子控件。 我想,该表格没有告诉其子更新,直到AnimateWindow调用之后。 我试图坚持Form.Update()设置为标签的文本字段后调用,但这并不能帮助。
基本步骤我现在服用:
// Main form of the application.
public class MainForm : Form
{
// The notification toast.
protected ToastForm toast;
// Public method called to show and update the toast.
public void UpdateToast( string text1, string text2 )
{
// Create a new toast form if one does not exist yet.
if ( this.toast == null )
{
this.toast = new ToastForm();
}
// Update the toast form's Label controls.
// Note that this isn't exactly how it's done in my app. There are fields safely
// wrapping the Label controls. I just did it this way here to be concise.
this.toast.firstLabel.Text = text1;
this.toast.secondLabel.Text = text2;
// This doesn't help.
this.toast.Update();
// P/invoke the Win32 AnimateWindow function on the toast form.
User32.AnimateWindow( this.toast.Handle, 750, AnimateWindowFlags.AW_ACTIVATE | AnimateWindowFlags.AW_BLEND );
// Call Show method on the toast form. This is needed to get the controls to
// update at all.
this.toast.Show( this );
}
}
没有人有任何建议,得到这个工作?
编辑:
我摸索出了黑客攻击。 标签文本分配后,我设置了敬酒的大小为0,宽度和高度为0。 接下来,我先打电话展,然后在吐司隐藏。 然后,我设置了烤面包的大小回到它最初。 最后,我呼吁AnimateWindow上致祝酒辞。 是啊,它的工作原理,但它是一个黑客...任何更好的想法?