void CTestDlg::TrayIcon()
{
        if(!m_TaskFlag)
        {
                ShowWindow(SW_HIDE);
                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 = UM_ICONNOTIFY; //우리가 만든 메시지
                nid.hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
                lstrcpy(nid.szTip,"우리가 만든 태스크바"); // 툴팁
                Shell_NotifyIcon(NIM_ADD,&nid);
                // taskBar상태영역에 아이콘 추가,삭제,수정할때 시스템에 메시지 전달
                SendMessage(WM_SETICON,(WPARAM)TRUE,(LPARAM)nid.hIcon);
                // taskBar 상태영역에 아이콘 설정
                m_TaskFlag = TRUE;
        }
}

이 함수를 실행하면 현재의 창이 사라지면서 트레이 아이콘이 생깁니다.


void CDetectPointDlg::TrayCallback(WPARAM wParam, LPARAM lParam)
{
    switch(lParam)
    {
        case WM_RBUTTONDOWN:
                AfxMessageBox("트레이 아이콘!");
                break;
        case WM_LBUTTONDOWN:
                ShowWindow(SW_SHOW);
                m_TaskFlag = FALSE;
                break;

        case WM_RBUTTONDBLCLK:
                CMenu menu, *pSubMenu;
                if(!menu.LoadMenu(IDR_MENU)) return 0;
                if(!(pSubMenu = menu.GetSubMenu(0))) return 0;
                CPoint pos;
                GetCursorPos(&pos);
                SetForegroundWindow();
                pSubMenu->TrackPopupMenu(TPM_RIGHTALIGN, pos.x, pos.y, this);
                menu.DestroyMenu();
                break;        
    }
}
이 함수는 오른쪽 밑에 있는 트레이 아이콘에 대한 이벤트 처리하는 부분이고요...

BEGIN_MESSAGE_MAP에 메세지 연결 해주시고...

ON_MESSAGE(UM_ICONNOTIFY,TrayCallback)  // 메시지 추가

#define UM_ICONNOTIFY WM_USER+6001
이것두 추가해 주셔야 합니다...



// 트레이 종료..
Shell_NotifyIcon(NIM_DELETE, &nid);