White Whale Studio

[WPF] Tray (트레이) 생성하고 조작하기! 본문

IT Engineering/.Net (WPF)

[WPF] Tray (트레이) 생성하고 조작하기!

glorymind 2013. 7. 25. 15:07
반응형

거짓말 안보태고 약 3~40분을 제대로된 코드를 찾기위해 웹 서핑을 했습니다..ㅠㅠ

 

각설하고 바로 코드로 들어가보죠.

 

검색결과 Tray는 일단 Window Form 기반에서 돌아가는게 기본입니다.

그러나 WPF 또한 C#으로 되어있어 윈폼과 그 근간을 같이하니 당연히 호환이 되겠죠.

 

따라서, 제가 사용한 프로젝트는 Windows Form 기반 프로젝트가 아닙니다!!  WPF 응용 프로그램 기반 프로젝트이니 꼭 유의하시고 참조하세요!

 

일단은 그래도 윈폼기반인지라 참조파일에서 추가를 해주셔야됩니다.

각 프로젝트의 참조 - 참조 추가 - System.Windows.Forms 를 추가해주시면 됩니다.

아 물론 코드에서도 using 구문을 사용해서 추가해주셔야 되구요.

추가하신뒤의 코드는 다음과 같습니다.

 

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using WinForms = System.Windows.Forms;


namespace TrayTest

{
    /// <summary>
    /// MainWindow.xaml에 대한 상호 작용 논리
    /// </summary>
    public partial class MainWindow : Window
    {      

        public MainWindow()
        {
            InitializeComponent();           
        }
        private System.Windows.Threading.DispatcherTimer timer;
        public System.Windows.Forms.NotifyIcon notify;
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            try
            {
//---------  이 부분은 ContextMenu라고 해서 메뉴 패널이 등장하도록 설정하는 부분입니다.

//보통 트레이에서 오른쪽 클릭하면 나타나는 기능이라고 보시면 되죠. 아래의 코드와 같이 아이템들을 각각

 //선언하고 각 아이템별로 기능을 부여하시면 됩니다.

                System.Windows.Forms.ContextMenu menu = new System.Windows.Forms.ContextMenu();

 


                System.Windows.Forms.MenuItem item1 = new System.Windows.Forms.MenuItem();
                System.Windows.Forms.MenuItem item2 = new System.Windows.Forms.MenuItem();
                menu.MenuItems.Add(item1);
                menu.MenuItems.Add(item2);

                item1.Index = 0;
                item1.Text = "프로그램 종료";
                item1.Click += delegate(object click, EventArgs eClick)
                {
                    this.Close();
                };
                item2.Index = 0;
                item2.Text = "프로그램 설정";
                item2.Click += delegate(object click, EventArgs eClick)
                {
                    this.Close(); // 현재는 두가지 기능모두 닫도록 해 뒀지만 필요에 맞게 바꾸시면 됩니다.
                };
                
                notify = new System.Windows.Forms.NotifyIcon();
                notify.Icon = TrayTest.Properties.Resources.ICON;     // 아이콘 설정부분입니다. 프로젝트에 있는 리소스를 가지고 옵니다. 검색결과로는 Uri를 사용할수 없다고 하니 부득이하게 리소스에 추가하신 뒤 사용을 하셔야 할 것같습니다.
                notify.Visible = true;
                notify.DoubleClick +=
                    delegate(object senders, EventArgs args)
                    {
                        this.Show();
                        this.WindowState = WindowState.Normal;
                    };
                notify.ContextMenu = menu;
                notify.Text = "Test";
               
                timer = new System.Windows.Threading.DispatcherTimer();
                timer.Interval = new TimeSpan(0, 0, 2);
                timer.Tick += new EventHandler(timer_Tick);
                timer.Start();


            }
            catch (Exception ee)
            {
            }
        }
        private int c=0;

 

// ---- 이 부분은 트레이에서 팝업처럼 뿅 하고 나타나는 팁 기능을 구현하는 부분입니다.

// 코드를 보시면 대충 아시겠지만 쓰레드를 사용해서 팁을 띄워주는 기능을 합니다. 필요에 따라서 바꾸시면 되겠습니다.


        void timer_Tick(object sender, EventArgs e)
        {
            notify.BalloonTipTitle = "Title";
            notify.BalloonTipText = "BalloonTip Text";
            notify.ShowBalloonTip(1000);
           ++c;
        }

        protected override void OnStateChanged(EventArgs e)
        {
            if (WindowState.Minimized.Equals(WindowState))
            {
                this.Hide();
            }
            base.OnStateChanged(e);
        }
       

    }
}

 

 

 

 

제대로 작성이 되었다면 위와 같이 출력됩니다.

아.. 인터넷 검색중에 msdn에 기본적인 내용이 있던데요 notifyicon로 검색해보시면 될것같습니다.

반응형
Comments