문제

Windows 알림 영역 (시스템 트레이)에 아이콘을 배치하는 방법을 알고 있습니다.

아이콘 애니메이션을 갖는 가장 좋은 방법은 무엇입니까? 애니메이션 GIF를 사용할 수 있습니까, 아니면 타이머에 의존해야합니까?

C#과 WPF를 사용하고 있지만 Winforms도 받아 들여졌습니다.

도움이 되었습니까?

해결책

Abhinaba Basu의 블로그 게시물 C#을 사용하여 시스템 트레이의 애니메이션 및 텍스트 설명합니다.

그것은 다음으로 나옵니다.

  • 애니메이션 프레임을 나타내는 아이콘 배열을 만듭니다.
  • 타이머 이벤트의 트레이에서 아이콘을 전환합니다
  • 비트 맵 스트립을 만듭니다. 각 프레임은 16x16 픽셀입니다
  • 사용 Systray.cs

예를 들어

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 다음 코드를 사용하여 애니메이션 프레임을 만듭니다

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 객체를 새 그림으로 계속 변경할 수있는 여러 개의 작은 아이콘을 갖는 것입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top