2009-02-18 35 views
15

Tôi biết cách đặt biểu tượng trong vùng thông báo Windows (khay hệ thống).Khay Biểu tượng hoạt ảnh

Phương pháp tốt nhất để có biểu tượng hoạt ảnh là gì? Bạn có thể sử dụng một gif động, hoặc bạn phải dựa vào một bộ đếm thời gian?

Tôi đang sử dụng C# và WPF, nhưng WinForms cũng được chấp nhận.

Trả lời

22

Abhinaba Basu's blog post Animation and Text in System tray using C# giải thích.

Nó đi xuống đến:

  • làm một loạt các biểu tượng mỗi trong số đó đại diện cho một khung hình ảnh động.
  • chuyển đổi các biểu tượng trong khay trên các sự kiện hẹn giờ
  • tạo dải bitmap. Mỗi khung là pixel 16x16
  • sử dụng SysTray.cs

ví dụ

enter image description here

private void button1_Click(object sender, System.EventArgs e) 
{ 
    m_sysTray.StopAnimation(); 
    Bitmap bmp = new Bitmap("tick.bmp"); 
    // the color from the left bottom pixel will be made transparent 
    bmp.MakeTransparent(); 
    m_sysTray.SetAnimationClip(bmp); 
    m_sysTray.StartAnimation(150, 5); 
} 

SetAnimationClip sử dụng đoạn mã sau để tạo ra các khung hình ảnh động

public void SetAnimationClip (Bitmap bitmapStrip) 
{ 
    m_animationIcons = new Icon[bitmapStrip.Width/16]; 
    for (int i = 0; i < m_animationIcons.Length; i++) 
    { 
     Rectangle rect = new Rectangle(i*16, 0, 16, 16); 
     Bitmap bmp = bitmapStrip.Clone(rect, bitmapStrip.PixelFormat); 
     m_animationIcons[i] = Icon.FromHandle(bmp.GetHicon()); 
    } 
} 

Để animate khung StartAnimation bắt đầu một giờ và trong giờ các biểu tượng được thay đổi để animate toàn bộ chuỗi .

public void StartAnimation(int interval, int loopCount) 
{ 
    if(m_animationIcons == null) 
     throw new ApplicationException("Animation clip not set with  
             SetAnimationClip"); 

    m_loopCount = loopCount; 
    m_timer.Interval = interval; 
    m_timer.Start(); 
} 

private void m_timer_Tick(object sender, EventArgs e) 
{ 
    if(m_currIndex < m_animationIcons.Length) 
    { 
     m_notifyIcon.Icon = m_animationIcons[m_currIndex]; 
     m_currIndex++; 
    } 
    .... 
} 

Sử dụng SysTray

Tạo và dây lên thực đơn của bạn

ContextMenu m_menu = new ContextMenu();         
m_menu.MenuItems.Add(0, new MenuItem("Show",new 
        System.EventHandler(Show_Click))); 

Nhận một biểu tượng bạn muốn hiển thị tĩnh trong khay.

Tạo một đối tượng SysTray với tất cả các thông tin cần thiết

m_sysTray = new SysTray("Right click for context menu", 
      new Icon(GetType(),"TrayIcon.ico"), m_menu); 

Tạo dải hình ảnh với khung hình ảnh động. Đối với 6 dải khung hình ảnh sẽ có chiều rộng 6 * 16 và chiều cao 16 pixel

Bitmap bmp = new Bitmap("tick.bmp"); 
// the color from the left bottom pixel will be made transparent 
bmp.MakeTransparent(); 
m_sysTray.SetAnimationClip(bmp); 

hoạt hình Bắt đầu cho thấy bao nhiêu lần bạn cần để lặp các hình ảnh động và sự chậm trễ khung

m_sysTray.StartAnimation(150, 5); 

Để dừng hoạt ảnh gọi

m_sysTray.StopAnimation(); 
+4

Đảm bảo kiểm tra các nhận xét trên bài viết đó: "Xấu hổ với tôi: (Có nhiều lỗ hổng trong mã." (http://blogs.msdn.com/b/abhinaba/archive/2005/09/12/animation-and-text-in-system-tray-using-c. aspx # 504147) –

2

Tôi nghĩ cách tốt nhất để làm điều này là có nhiều biểu tượng nhỏ mà bạn có thể tiếp tục thay đổi đối tượng systray thành hình ảnh mới dựa trên tốc độ và thời gian.

Các vấn đề liên quan