2010년 6월 25일 금요일

Tray Icon 만들기

VC++ 에서는 Tray ICon 만들기가 정말 쉽다.

 

여기 저기 많은 자료를 찾아봤는데

 

http://erik-ymkim.blogspot.com/2008/01/how-to-use-tray-icon-with-vc.html 여기에 정리되어 있는

 

자료가 제일 간단하게 정리되어 있습니다. ^^

 

^^ 쉽게 보면

 

Header 에

NOTIFYICONDATA m_NotiIcon; 선언

 

초기 생성에 아래 내용 입력 (Create 또는 OnInitDialog())

 m_NotiIcon.cbSize = sizeof(m_NotiIcon);
 m_NotiIcon.hWnd = this->m_hWnd;
 m_NotiIcon.uID = IDI_TRAY_ICON;
 m_NotiIcon.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
 m_NotiIcon.uCallbackMessage = WM_MY_TRAYICON;
 m_NotiIcon.hIcon = AfxGetApp()->LoadIcon(IDI_TRAY_ICON);
 strcpy(m_NotiIcon.szTip, "MemoMin");
 Shell_NotifyIcon(NIM_ADD, &m_NotiIcon);

각각의 전달되는 메시지에 맞게 Event 처리

TrayIConMsg(WPARAM wParam, LPARAM lParam)

switch(lParam)
 {
 case WM_RBUTTONDOWN:
  {
   break;
  }
 case WM_LBUTTONDBLCLK:
  {
   break;
  }
 }

 

Event는 PreTranslateMessage(MSG* pMsg) 에서 받으면 되니까

PreTranslateMessage(MSG* pMsg)

{

if(pMsg->hwnd == m_NotiIcon.hWnd)
 {
  TrayIConMsg(pMsg->lParam, pMsg->message); // 메시지 받아 바로 전달 ^^

 }

}

 

이렇게 처리하면 쉽게 가능하다 ^^

 

프로그램 종료시에는

Shell_NotifyIcon(NIM_DELETE, &m_NotiIcon);

Icon을 삭제해주는 쎈스 ~~

 

만약에 여러개의 TrayICon을 주기적으로 변경해주기 위해서는

현재 보여지고 있는 TrayICon을 삭제하교 새로운 TrayICon을 띄워주면 된다.

 

삭제하고 새로보여줄때

Shell_NotifyIcon( NIM_MODIFY, &m_NotiIcon);

위에 것을 잘 활용하면 움직이는 것처럼 보여줄수 있다. ^^


출처 : Tong - 공원님의 ┣ ★ 먹고사는일(VC++)통

댓글 없음:

댓글 쓰기