C#

[펌] 트레이 아이콘 만들기

십억10 2009. 8. 3. 16:45

안녕하세요? 맨날맑음 입니다.

네이트을 보면 X(종료) 버튼을 누를시 프로그램이 꺼지지 않고, 트레이로 가게 됩니다.
이번에 알아볼 내용은 .net Windows Forms 프로젝트에서 이런 기능을 구현 하는 것입니다.

우선 준비물이 필요합니다. 트레이에 나타나게 할 아이콘 파일(.ico)입니다.
아이콘 파일은 웹상에서 마음에 드는것을 다운로드 받아도 되고, 포토샵이나 기타 프로그램으로
그림파일을 변환시켜 사용하셔도 됩니다. 물론 솔루션 탐색기 -> 해당 프로젝트(우클릭) -> 추가 -> 새항목 -> 아이콘파일을 선택하셔서 직접 그려서 사용하셔도 됩니다. 각자 취향에 맞는 아이콘을 준비해 주면 됩니다.

우선 Windows Forms 프로젝트를 생성합니다.

 

 


도구상자에서 NotifyIcon을 선택하여 Form에 추가 합니다. 추가 후 소성창의 Icon 속성에 준비해준 Ico 파일을 연결해 줍니다. 여기까지만 하고 실행시켜도 트레이에 우리 프로그램의 아이콘이 보이는 걸 볼 수 있습니다.

 

 


트레이에서 마우스 오른쪽 버튼을 눌렀을 경우 나올 메뉴를 위해 ContextMenuStrip도 추가해 줍니다.

 

 

ContextMenuStrip의 메뉴를 추가 합니다. 간단히 '종료' 메뉴(Name : ExitToolStripMenuItem)만 넣었습니다. 다시 notifyIcon1의 속성창으로 가서 ContextMenuStrip의 값을 contextMenuStrip1로 지정 합니다.

 

 

여기까지 하셨으면 프로그램 실행 시 트레이에 아이콘이 나타나게 되고, 오른쪽 버튼으로 아이콘을 클릭하면
종료 메뉴가 나타나게 됩니다.

이제 코드창(cs)으로 가서 몇가지 이벤트핸들러만 구현해 주면 트레이에 아이콘이 나타나는 프로그램을 만들수 있습니다.

  1. using System;   
  2. using System.Windows.Forms;   
  3. namespace TraySample   
  4. {   
  5.     public partial class Form1 : Form   
  6.     {   
  7.         public Form1()   
  8.         {   
  9.             InitializeComponent();   
  10.             this.FormClosing += Form1_FormClosing;   
  11.             this.notifyIcon1.DoubleClick += notifyIcon1_DoubleClick;   
  12.             this.ExitToolStripMenuItem.Click += ExitToolStripMenuItem_Click;   
  13.         }   
  14.         // 트레이의 종료 메뉴를 눌렀을때   
  15.         void ExitToolStripMenuItem_Click(object sender, EventArgs e)   
  16.         {   
  17.             //트레이아이콘 없앰   
  18.             notifyIcon1.Visible = false;   
  19.             //프로세스 종료   
  20.             Application.Exit();   
  21.         }   
  22.         //트레이 아이콘을 더블클릭 했을시 호출   
  23.         void notifyIcon1_DoubleClick(object sender, EventArgs e)   
  24.         {   
  25.             this.Visible = true// 폼의 표시   
  26.             if (this.WindowState == FormWindowState.Minimized)   
  27.                 this.WindowState = FormWindowState.Normal; // 최소화를 멈춘다    
  28.             this.Activate(); // 폼을 활성화 시킨다   
  29.         }   
  30.         //폼이 종료 되려 할때 호출   
  31.         void Form1_FormClosing(object sender, FormClosingEventArgs e)   
  32.         {   
  33.             e.Cancel = true// 종료 이벤트를 취소 시킨다   
  34.             this.Visible = false// 폼을 표시하지 않는다;   
  35.         }   
  36.     }   
  37. }  

주석으로 충분한 설명이 있지만 간단히 소스를 설명하면, 우선 타이틀바의 X 단추를 눌렀을때 프로그램이 종료 되는것을 막기위해 FormClosing 이벤트 핸들러에서 폼이 종료 이벤트를 취소 시켰습니다.
또한 트레이 아이콘을 더블클릭하면 폼이 다시 나와야함으로 notifyIcon1_DoubleClick 이벤트 핸들러에서 는 폼을 다시 표시하고, 활성화 시켰으며, 메뉴에서 종료를 선택했을때는 프로그램을 종료하게 하였습니다.

 


이렇게 간단하게 네이트온처럼 트레이에 표시되는 응용프로그램을 만들 수 있습니다.

 

출처 :  http://crynut84.tistory.com/41