헤더파일에 추가
#define WM_TRAYICON_MSG WM_USER+1
======================================================================================
소스파일에 추가
메세지 맵 추가
BEGIN_MESSAGE_MAP(CSChatSvrDlg, CDialog)
//{{AFX_MSG_MAP(CSChatSvrDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ACTIVATE, OnActivate)
ON_WM_DESTROY()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TRAYICON_MSG, TrayIconMsg)
END_MESSAGE_MAP()
트레이 등록 함수
void CSChatSvrDlg::RegistTrayIcon()
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = m_hWnd; // 메인 윈도우 핸들
nid.uID = IDI_ICON1; //아이콘 리소스 ID
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그 설정
nid.uCallbackMessage = WM_TRAYICON_MSG; // 콜백메시지 설정
nid.hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); //아이콘 로드
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_blsTrayIcon = TRUE; // 트레이 상태 체크 변수
}
메시지에 반응 할 함수
void CSChatSvrDlg::TrayIconMsg(WPARAM wParam, LPARAM lParam)
{
// 등록된 TrayIcon 클릭하면 Show..
if(lParam == WM_LBUTTONDBLCLK)
{
ShowWindow(SW_SHOW);
}
}
프로그램 종료시 트레이 관련 자원 해제
if(m_blsTrayIcon) // 현재 트레이 아이콘으로 설정되었는지 확인
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = m_hWnd; // 메인 윈도우 핸들
nid.uID = IDI_ICON1;
// 작업 표시줄(TaskBar)의 상태 영역에 아이콘을 삭제한다.
Shell_NotifyIcon(NIM_DELETE, &nid);
}
#define WM_TRAYICON_MSG WM_USER+1
======================================================================================
소스파일에 추가
메세지 맵 추가
BEGIN_MESSAGE_MAP(CSChatSvrDlg, CDialog)
//{{AFX_MSG_MAP(CSChatSvrDlg)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_ACTIVATE, OnActivate)
ON_WM_DESTROY()
ON_WM_CLOSE()
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TRAYICON_MSG, TrayIconMsg)
END_MESSAGE_MAP()
트레이 등록 함수
void CSChatSvrDlg::RegistTrayIcon()
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = m_hWnd; // 메인 윈도우 핸들
nid.uID = IDI_ICON1; //아이콘 리소스 ID
nid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP; // 플래그 설정
nid.uCallbackMessage = WM_TRAYICON_MSG; // 콜백메시지 설정
nid.hIcon = AfxGetApp()->LoadIcon(IDI_ICON1); //아이콘 로드
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_blsTrayIcon = TRUE; // 트레이 상태 체크 변수
}
메시지에 반응 할 함수
void CSChatSvrDlg::TrayIconMsg(WPARAM wParam, LPARAM lParam)
{
// 등록된 TrayIcon 클릭하면 Show..
if(lParam == WM_LBUTTONDBLCLK)
{
ShowWindow(SW_SHOW);
}
}
프로그램 종료시 트레이 관련 자원 해제
if(m_blsTrayIcon) // 현재 트레이 아이콘으로 설정되었는지 확인
{
NOTIFYICONDATA nid;
nid.cbSize = sizeof(nid);
nid.hWnd = m_hWnd; // 메인 윈도우 핸들
nid.uID = IDI_ICON1;
// 작업 표시줄(TaskBar)의 상태 영역에 아이콘을 삭제한다.
Shell_NotifyIcon(NIM_DELETE, &nid);
}
반응형
'Program > C & C++' 카테고리의 다른 글
MFC를 이용한 범용 서버/데이타 소켓 작성 (0) | 2011.07.30 |
---|---|
MFC를 이용한 범용 소켓을 이용한 예제 (0) | 2011.07.30 |
소켓의 사용 유무 (0) | 2011.07.29 |
mfc 마우스 파일 드래그 (0) | 2011.07.18 |
[MFC] Thread를 이용한 TCP기반 Receive()함수 구현 (0) | 2011.07.17 |