트레이 아이콘 애니메이션
-
05-09-2019 - |
문제
Windows 알림 영역 (시스템 트레이)에 아이콘을 배치하는 방법을 알고 있습니다.
아이콘 애니메이션을 갖는 가장 좋은 방법은 무엇입니까? 애니메이션 GIF를 사용할 수 있습니까, 아니면 타이머에 의존해야합니까?
C#과 WPF를 사용하고 있지만 Winforms도 받아 들여졌습니다.
해결책
Abhinaba Basu의 블로그 게시물 C#을 사용하여 시스템 트레이의 애니메이션 및 텍스트 설명합니다.
그것은 다음으로 나옵니다.
- 애니메이션 프레임을 나타내는 아이콘 배열을 만듭니다.
- 타이머 이벤트의 트레이에서 아이콘을 전환합니다
- 비트 맵 스트립을 만듭니다. 각 프레임은 16x16 픽셀입니다
- 사용 Systray.cs
예를 들어
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
다음 코드를 사용하여 애니메이션 프레임을 만듭니다
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());
}
}
프레임을 애니메이션합니다 StartAnimation
타이머를 시작하고 타이머에서 아이콘이 전체 시퀀스를 애니메이션하도록 변경됩니다.
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++;
}
....
}
Systray 사용
메뉴를 만들고 연결하십시오
ContextMenu m_menu = new ContextMenu();
m_menu.MenuItems.Add(0, new MenuItem("Show",new
System.EventHandler(Show_Click)));
트레이에 정적으로 표시하려는 아이콘을 얻으십시오.
필요한 모든 정보가 포함 된 Systray 객체를 만듭니다
m_sysTray = new SysTray("Right click for context menu",
new Icon(GetType(),"TrayIcon.ico"), m_menu);
애니메이션 프레임으로 이미지 스트립을 만듭니다. 6 프레임 스트립의 경우 이미지의 너비는 6*16이고 높이는 16 픽셀입니다.
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);
애니메이션 통화를 중지합니다
m_sysTray.StopAnimation();
다른 팁
이 작업을 수행하는 가장 좋은 방법은 속도와 시간에 따라 Systray 객체를 새 그림으로 계속 변경할 수있는 여러 개의 작은 아이콘을 갖는 것입니다.
제휴하지 않습니다 StackOverflow