- 트레이 등록 함수
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);
}
'프로그래밍언어 > C++, MFC' 카테고리의 다른 글
사용자정의 메시지 버그? unhandled exception 에러 발생 할때 (0) | 2009.08.14 |
---|---|
cab 파일 만드는 법 (0) | 2008.11.12 |
문자열 코드 변환 방법 및 기초 지식 (VC++) (0) | 2008.10.30 |
WSAAsyncSelect 모델 정의 (0) | 2008.10.22 |
사용자 정의 메시지 핸들러 (0) | 2008.10.13 |
댓글