블로그 이미지
Every unexpected event is a path to learning for you.

카테고리

분류 전체보기 (2731)
Unity3D (814)
Programming (474)
Server (33)
Unreal (4)
Gamebryo (56)
Tip & Tech (228)
협업 (57)
3DS Max (3)
Game (12)
Utility (136)
Etc (96)
Link (32)
Portfolio (19)
Subject (90)
iOS,OSX (51)
Android (14)
Linux (5)
잉여 프로젝트 (2)
게임이야기 (3)
Memories (20)
Interest (38)
Thinking (38)
한글 (30)
PaperCraft (5)
Animation (408)
Wallpaper (2)
재테크 (18)
Exercise (3)
나만의 맛집 (3)
냥이 (10)
육아 (16)
Total
Today
Yesterday
03-29 00:00

시스템 트레이(task tray)에 아이콘을 표시하려면?

 Outlook이나 MSN Messenger등과 같이 Windows 어플리케이션에서는 시스템 트레이(task tray, status 영역이라고도 불린다)에 아이콘을 표시하고, 어플리케이션 상태를 나타내거나 어플리케이션의 폼을 표시하기 위한 쇼트컷으로 이용할 수 있다.

 .NET Framework의 클래스 라이브러리에는 시스템 트레이에 아이콘을 표시하기 위한 NotifyIcon 컴퍼넌트를 사용하여, 위와 같은 어플리케이션을 간단하게 작성할 수 있다.

 본고에서는, 이하와 같은사양의 어플리케이션을 작성하면서, NotifyIcon 컴퍼넌트의 기본적인 이용 방법에 대해 정리한다.

  • 기동시에 폼과 시스템 트레이에 아이콘을 표시한다

  • 아이콘을 오른쪽 클릭해 표시되는 컨텍스트·메뉴의[종료]로 어플리케이션을 종료할 수 있다.

  • 폼의 오른쪽 상단에 있는[닫기]버튼을 클릭하면, 폼이 비표시화 된다(어플리케이션은 종료하지 않는다).

  • 아이콘의 더블 클릭으로 폼을 표시하고, 활성화 시킨다.

시스템 트레이에 아이콘을 표시

 우선 어플리케이션의 기동시에 시스템 트레이에 아이콘이 표시되도록 하자.

 Visual Studio .NET으로 Windows 어플리케이션의 프로젝트를 신규 작성하고,[툴 박스]윈도우에서 NotifyIcon 컴퍼넌트를 폼상에 드래그&드롭 한다.

 다음에[프로퍼티]윈도우에서 Icon 프로퍼티로 적당한 아이콘 파일(.ico 파일)을 선택한다. 여기서 지정한 아이콘이 시스템 트레이에 표시 된다. 이 설정을 하지 않으면, 어플리케이션을 실행해도 시스템 트레이에 아이콘이 표시되지 않는다.

 또, NotifyIcon 컴퍼넌트의 Text 프로퍼티에 문자열을 설정해 두면, 그것이 아이콘의 툴·힌트·텍스트로 사용된다. 이것은 마우스 커서를 아이콘으로 이동시켰을 때에 표시된다.

시스템 트레이 아이콘에서의 컨텍스트·메뉴 표시

 다음으로, 아이콘을 오른쪽 클릭할때[종료]메뉴를 표시하고 그것을 실행시키면 어플리케이션을 종료시키게 한다.

 이것은, ContextMenu 컴퍼넌트를 폼상으로- 드래그&드롭 해서[종료]항목을 추가하고,[프로퍼티]윈도우에서 NotifyIcon 컴퍼넌트의 ContextMenu 프로퍼티에, 지금 작성한 ContextMenu 컴퍼넌트를 설정한다.

이미지를 클릭하시면 원본크기로 보실수 있습니다.

[종료]메뉴의 항목을 추가한 ContextMenu 컴퍼넌트

여기서는 폼 메뉴로 디자인하지만, 메뉴(이 화면에서는 contextMenu1)를 NotifyIcon 컴퍼넌트의 ContextMenu 프로퍼티로 설정하여, 아이콘을 오른쪽 클릭했을 때에 표시되게 한다. □

 

아이콘의[종료]메뉴에 의한 어플리케이션의 종료

 다음에는 지금 추가한[종료]메뉴 항목을 더블 클릭 하고, 메뉴 항목의 선택시 실행되는 이벤트 핸들러를 아래와 같이 기술한다.

private void menuItem1_Click(object sender, System.EventArgs e)
{
  notifyIcon1.Visible = false; // 아이콘을 트레이에서 삭제
  Application.Exit(); // 어플리케이션 종료
}
Private Sub MenuItem1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MenuItem1.Click
  NotifyIcon1.Visible = False '아이콘을 트레이에서 삭제
  Application.Exit() ' 어플리케이션 종료
End Sub

 

컨텍스트 메뉴의[종료]이벤트 핸들러의 기술(상:C#, 하:VB.NET)

 통상 Windows 폼을 종료시킬 때는 Close 메소드를 호출하지만, 이번에는 다음 항목에서 서술하는 것처럼 Close 메소드 호출에 의해 발생하는 Closing 이벤트를 취소시킨다. 여기서는 Application.Exit 메소드에 의해 어플리케이션을 강제적으로 종료시킨다.

 또, 어플리케이션 종료시에 시스템 트레이에 아이콘이 남아 있는 일이 있으므로, 아이콘(NotifyIcon 오브젝트)의 Visible 프로퍼티를 false로 설정하여 시스템 트레이에서 지운다.

 시스템 트레이 아이콘을 이용해 어플리케이션을 작성한 뒤에 종료해도 아이콘이 남아있어서, 그 아이콘 위에 마우스 커서를 올리면 사라지는 현상이 발생할 때에 이 방법을 시험해 보자.

 

[닫기]버튼 클릭에 의한 폼의 비표시

 시스템 트레이에 아이콘이 표시되는, 이른바 상주형의 어플리케이션에서는 폼의 오른쪽 상단에 있는[닫기]버튼을 클릭해도 어플리케이션이 종료되지 않고 서 폼을 비표시 시키는 경우가 많다.

 이 동작을 구현하려면, 폼을 닫으려 할 때에 발생하는 Closing 이벤트의 이벤트·핸들러를 폼에 추가해, 다음과 같이 기술한다.

private void Form1_Closing(object sender, System.ComponentModel.CancelEventArgs e)
{
  e.Cancel = true; // 종료 처리의 취소
  this.Visible = false; // 폼의 비표시
}
Private Sub Form1_Closing(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles MyBase.Closing
  e.Cancel = True ' 종료 처리의 취소
  Me.Visible = False ' 폼의 비표시
End Sub
 
 
폼의 Closing 이벤트 핸들러의 기술(상:C#, 하:VB.NET)

 이 이벤트 핸들러에서는 파라미터로 건네받는 CancelEventArgs 오브젝트의 Cancel 프로퍼티에 true를 설정해서 폼의 종료 처리를 취소할 수 있다.

 또 여기에서는, 폼의 Visible 프로퍼티에 false를 설정해서 폼을 비표시 시킨다.

아이콘의 더블 클릭에 의한 폼의 표시

 마지막으로, 폼의[닫기]버튼에 의해 비표시가 된 폼을, 시스템 트레이의 아이콘을 더블 클릭 하는 것으로 다시 표시되도록 하자.

 여기에는 NotifyIcon 컴퍼넌트에 DoubleClick 이벤트 핸들러를 추가해서 다음과 같이 기술한다.

private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
{
  this.Visible = true; // 폼의 표시
  if (this.WindowState == FormWindowState.Minimized)
    this.WindowState = FormWindowState.Normal; // 최소화를 멈춘다
  this.Activate(); // 폼을 활성화 시킨다
}
Private Sub NotifyIcon1_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles NotifyIcon1.DoubleClick
  Me.Visible = True '폼의 표시
  If Me.WindowState = FormWindowState.Minimized Then
    Me.WindowState = FormWindowState.Normal ' 최소화를 멈춘다
  End If
  Me.Activate() ' 폼을 활성화 시킨다
End Sub

 

아이콘(NotifyIcon 컴퍼넌트)의 DoubleClick 이벤트 핸들러의 기술(상:C#, 하:VB.NET)

 폼이 최소화되고 있는 경우에는 폼의 WindowState 프로퍼티에 FormWindowState.Normal로 설정하여 폼의 기본 상태로 되돌린다.

 또, 폼의 Activate 메소드를 호출해 폼을 활성화 시키고 있다. 이로써, 폼이 다른 윈도우 뒤에 숨을 경우에도 맨 앞에 표시 된다.

반응형

'Programming > C#' 카테고리의 다른 글

레지스트리 값 읽고, 쓰기 방법  (0) 2010.07.22
트레이 아이콘 만들기  (0) 2010.07.22
[Link] C# 관련 사이트  (0) 2010.07.22
C# 진법전환  (0) 2010.07.22
is 와 as  (0) 2010.07.21
Posted by blueasa
, |