Windows/Windows API
system tray
aucd29
2013. 10. 1. 19:00
[img src=www.codeproject.com/useritems/SysTray_Application/systray_demo.jpg]
1, 필수 파일
[code]#include <shellapi.h>[/code]
2. inint
[code]
nidApp.cbSize = sizeof(NOTIFYICONDATA); // sizeof the struct in bytes
nidApp.hWnd = (HWND) hWnd; //handle of the window which will process this app. messages
nidApp.uID = IDI_SYSTRAYDEMO; //ID of the icon that willl appear in the system tray
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //ORing of all the flags
nidApp.hIcon = hMainIcon; // handle of the Icon to be displayed, obtained from LoadIcon
nidApp.uCallbackMessage = WM_USER_SHELLICON;
LoadString(hInstance, IDS_APPTOOLTIP,nidApp.szTip,MAX_LOADSTRING);
[/code]
3. system icon 보이기
[code]Shell_NotifyIcon(NIM_ADD, &nidApp); [/code]
4. dynamic pop up
case WM_USER_SHELLICON:
// systray msg callback
switch(LOWORD(lParam))
{
case WM_RBUTTONDOWN:
UINT uFlag = MF_BYPOSITION|MF_STRING;
GetCursorPos(&lpClickPoint);
hPopMenu = CreatePopupMenu();
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_ABOUT,_T("About"));
if ( bDisable == TRUE )
{
uFlag |= MF_GRAYED;
}
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST2,_T("Test 2")); // Test 2
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST1,_T("Test 1")); // Test 1
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));
if ( bDisable == TRUE )
{
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_ENABLE,_T("Enable"));
}
else
{
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_DISABLE,_T("Disable"));
}
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_EXIT,_T("Exit"));
SetForegroundWindow(hWnd);
TrackPopupMenu(hPopMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_BOTTOMALIGN,lpClickPoint.x, lpClickPoint.y,0,hWnd,NULL);
return TRUE;
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_TEST1:
MessageBox(NULL,_T("This is a test for menu Test 1"),_T("Test 1"),MB_OK);
break;
case IDM_TEST2:
MessageBox(NULL,_T("This is a test for menu Test 2"),_T("Test 2"),MB_OK);
break;
case IDM_DISABLE:
bDisable = TRUE;
break;
case IDM_ENABLE:
bDisable = FALSE;
break;
case IDM_EXIT:
Shell_NotifyIcon(NIM_DELETE,&nidApp);
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
1, 필수 파일
[code]#include <shellapi.h>[/code]
2. inint
[code]
nidApp.cbSize = sizeof(NOTIFYICONDATA); // sizeof the struct in bytes
nidApp.hWnd = (HWND) hWnd; //handle of the window which will process this app. messages
nidApp.uID = IDI_SYSTRAYDEMO; //ID of the icon that willl appear in the system tray
nidApp.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; //ORing of all the flags
nidApp.hIcon = hMainIcon; // handle of the Icon to be displayed, obtained from LoadIcon
nidApp.uCallbackMessage = WM_USER_SHELLICON;
LoadString(hInstance, IDS_APPTOOLTIP,nidApp.szTip,MAX_LOADSTRING);
[/code]
3. system icon 보이기
[code]Shell_NotifyIcon(NIM_ADD, &nidApp); [/code]
4. dynamic pop up
case WM_USER_SHELLICON:
// systray msg callback
switch(LOWORD(lParam))
{
case WM_RBUTTONDOWN:
UINT uFlag = MF_BYPOSITION|MF_STRING;
GetCursorPos(&lpClickPoint);
hPopMenu = CreatePopupMenu();
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_ABOUT,_T("About"));
if ( bDisable == TRUE )
{
uFlag |= MF_GRAYED;
}
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST2,_T("Test 2")); // Test 2
InsertMenu(hPopMenu,0xFFFFFFFF,uFlag,IDM_TEST1,_T("Test 1")); // Test 1
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));
if ( bDisable == TRUE )
{
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_ENABLE,_T("Enable"));
}
else
{
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_DISABLE,_T("Disable"));
}
InsertMenu(hPopMenu,0xFFFFFFFF,MF_SEPARATOR,IDM_SEP,_T("SEP"));
InsertMenu(hPopMenu,0xFFFFFFFF,MF_BYPOSITION|MF_STRING,IDM_EXIT,_T("Exit"));
SetForegroundWindow(hWnd);
TrackPopupMenu(hPopMenu,TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_BOTTOMALIGN,lpClickPoint.x, lpClickPoint.y,0,hWnd,NULL);
return TRUE;
}
break;
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{
case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_TEST1:
MessageBox(NULL,_T("This is a test for menu Test 1"),_T("Test 1"),MB_OK);
break;
case IDM_TEST2:
MessageBox(NULL,_T("This is a test for menu Test 2"),_T("Test 2"),MB_OK);
break;
case IDM_DISABLE:
bDisable = TRUE;
break;
case IDM_ENABLE:
bDisable = FALSE;
break;
case IDM_EXIT:
Shell_NotifyIcon(NIM_DELETE,&nidApp);
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;