본문 바로가기
프로그래머/프로그래밍

트래이 아이콘 프로그램 만들기

by plog 2008. 10. 14.

- 트레이 등록 함수
 void CTeamStatMakerDlg::RegistTrayIcon()
{
    NOTIFYICONDATA  nid;
    nid.cbSize = sizeof(nid);
    nid.hWnd = m_hWnd; // 메인 윈도우 핸들
    nid.uID = IDR_MAINFRAME;  // 아이콘 리소스 ID
    nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그 설정
    nid.uCallbackMessage = WM_TRAYICON_MSG; // 콜백메시지 설정
    nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME); // 아이콘 로드 

    char strTitle[256];
    GetWindowText(strTitle, sizeof(strTitle)); // 캡션바에 출력된 문자열 얻음
    lstrcpy(nid.szTip, strTitle);
    Shell_NotifyIcon(NIM_ADD, &nid);
    SendMessage(WM_SETICON, (WPARAM)TRUE, (LPARAM)nid.hIcon);
    m_bIsTrayIcon = TRUE; // 트레이 상태 체크 변수
}

- 사용자 정의 메시지 생성
   여기서 해줄 내용은 트레이 아이콘을 클릭 등 이벤트 발생시 처리 해줄 기능을 추가 하는 것이다.

메시지 선언
#define  WM_TRAYICON_MSG WM_USER + 1
메시지맵 셋팅
BEGIN_MESSAGE_MAP(CTeamStatMakerDlg, CDialog)
 //{{AFX_MSG_MAP(CAboutDlg)
 // No message handlers
 //}}AFX_MSG_MAP
 ON_MESSAGE(WM_TRAYICON_MSG, TrayIconMsg)
END_MESSAGE_MAP()

메시에 반응할 함수
void CTeamStatMakerDlg::TrayIconMsg(WPARAM wParam, LPARAM lParam)
{
    // 등록된 TrayIcon 클릭하면 Show....
    if(lParam == WM_LBUTTONDBLCLK)
    {  
        ShowWindow(SW_SHOW);
    }

프로그램 종료시 트레이 관련 자원 해제
if(m_bIsTrayIcon) // 현재 트레이 아이콘으로 설정되었는지 확인 
 {
  NOTIFYICONDATA  nid;
  nid.cbSize = sizeof(nid);
  nid.hWnd = m_hWnd; // 메인 윈도우 핸들
  nid.uID = IDR_MAINFRAME;

  // 작업 표시줄(TaskBar)의 상태 영역에 아이콘을 삭제한다.
  Shell_NotifyIcon(NIM_DELETE, &nid);
 }

 

'프로그래머 > 프로그래밍' 카테고리의 다른 글

문자열 코드 변환 방법 및 기초 지식 (VC++)  (0) 2008.10.30
Singleton 패턴  (0) 2008.10.23
WSAAsyncSelect 모델 정의  (0) 2008.10.22
iBatis의 장점  (2) 2008.10.20
사용자 정의 메시지 핸들러  (0) 2008.10.13

댓글