#define ICON_ID 0x1234
#define WM_TRAY 0x2345
#define MENU_INFO_MESSAGE 0x101
#define MENU_OPEN_MESSAGE 0x102
#define MENU_QUIT_MESSAGE 0x103
LRESULT CALLBACK WndProc(HWND hWnd, UINT iMessage, WPARAM wParam, LPARAM lParam){
int wmEvent, wmId;
HMENU hMenu, hPopupMenu, hMenubar;
hMenu = CreateMenu();
hMenubar = CreateMenu();
//hMenu에 메뉴 리스트를 추가해준다.
//3번째 인자는 매크로로 설정한 메세지로 이벤트 발생시 WM_COMMAND에서 처리.
AppendMenu(hMenu, MF_STRING, MENU_INFO_MESSAGE, TEXT("Info"));
AppendMenu(hMenu, MF_STRING, MENU_OPEN_MESSAGE, TEXT("Open"));
AppendMenu(hMenu, MF_STRING, MENU_QUIT_MESSAGE, TEXT("Quit"));
AppendMenu(hMenubar, MF_POPUP, (UINT_PTR)hMenu, TEXT("Menu"));
switch (iMessage){
case WM_CREATE:
NOTIFYICONDATA nid;
ZeroMemory(&nid, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hWnd;
nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE;
nid.uCallbackMessage = WM_TRAY; //트레이 아이콘 클릭시 발생될 윈도우 메세지
nid.uID = ICON_ID; //트레이 아이콘 식별자
nid.hIcon = (HICON)LoadImage(NULL, TEXT("icon.ico"), IMAGE_ICON, 0, 0, LR_LOADFROMFILE | LR_DEFAULTSIZE | LR_SHARED);
lstrcpy(nid.szTip, TEXT("Sample")); //트레이 아이콘에 마우스를 올렸을때 보일 메세지
Shell_NotifyIcon(NIM_ADD, &nid);
/*
NIM_ADD : 트레이에 새로운 아이콘 추가
NIM_DELETE : 트레이 영역의 아이콘 제거
NIM_MODIFY : 트레이 영역에 있는 아이콘 수정
*/
return 0;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
switch (wmId){
case MENU_INFO_MESSAGE:
//Info를 클릭했을시 처리할 루틴
break;
case MENU_OPEN_MESSAGE:
//Open을 클릭했을시 처리할 루틴
break;
case MENU_QUIT_MESSAGE:
//Quit을 클릭했을시 처리할 루틴
exit(0);
}
break;
return 0;
case WM_TRAY://마우스와 관련된 메세지만 처리한다.
if (wParam == ICON_ID){//등록시 설정한 트레이 아이콘 식별자
switch (lParam){
case WM_RBUTTONUP:
hPopupMenu = GetSubMenu(hMenubar, 0);
POINT pt;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
TrackPopupMenu(hPopupMenu, TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, pt.x, pt.y, 0, hWnd, NULL);
SetForegroundWindow(hWnd);
PostMessage(hWnd, WM_NULL, 0, 0);
break;
}
}
return 0;
case WM_DESTROY:
PostQuitMessage(0);
return 0;
}
return (DefWindowProc(hWnd, iMessage, wParam, lParam));
}


'C&C++' 카테고리의 다른 글

Features And Uses Of STL Container In C++  (0) 2018.11.04
Modern C++  (1) 2018.10.02
How To Use Json In C++(jsoncpp)  (0) 2018.09.08
Get Window Focus On Other Window  (0) 2018.07.09
WINAPI Deny System Key Code  (0) 2018.06.26

+ Recent posts