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);
위에 것을 잘 활용하면 움직이는 것처럼 보여줄수 있다. ^^
댓글 없음:
댓글 쓰기