我試圖使Outlook收到新電子郵件時使用通知窗口。我爲通知窗口提供了一個無模式窗體,其中包含兩個Label控件以顯示通知信息。爲了獲得淡入效果,我正在調用Win32 AnimateWindow函數。除了一件事外,一切似乎都行得通。.NET AnimateWindow
當我調用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高度。接下來,我先打電話給Show,然後再在麪包上隱藏。然後,我將烤麪包的大小恢復爲原來的大小。最後,我在烤麪包上叫AnimateWindow。是的,它的作品,但它是一個黑客...任何更好的想法?
閱讀[本博客文章](http://weblogs.asp.net/justin_rogers/archive/2004/07/28/200213.aspx)。 – SLaks 2009-09-29 19:17:28