win32创建应用程序的系统托盘图标
2014-02-14 13:56
489 查看
前段时间工作需要,做了一个应用程序并且是要带有系统托盘图标的,虽然网上还是有很多的相关代码介绍,但是这里还是想写一下,做一个记录吧,简单介绍下过程以及API的调用步骤。
我写的这个是基于一个模态对话框的:开始呢定义出我们要用的变量
NOTIFYICONDATA nid;
UINT WM_TASKBARCREATED = 0;
1、首先在WM_INITDIALOG消息中创建出我们的系统托盘图标的反键菜单(如果你需要)
if (pNid == NULL)
{
return;
}
pNid->cbSize = sizeof(NOTIFYICONDATA);
pNid->hWnd = hWnd;
pNid->uID = 0;
pNid->uFlags = NIF_ICON | NIF_MESSAGE | NIF_INFO | NIF_TIP;
pNid->uCallbackMessage = WM_USER;
pNid->hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcscpy(pNid->szInfo, _T("Synchronous Time"));
wcscpy(pNid->szTip, _T("Synchronous Time"));
wcscpy(pNid->szInfoTitle,_T(""));
Shell_NotifyIcon(NIM_ADD, pNid);
hmenu=CreatePopupMenu();
AppendMenu(hmenu, MF_STRING,IDR_SHOW, _T("Show"));
AppendMenu(hmenu, MF_STRING,IDR_EXIT, _T("Exit"));
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) | WS_EX_TOOLWINDOW);
2、处理default消息分支
default:
if (uMsg == WM_TASKBARCREATED)
SendMessage(hWnd, WM_CREATE, wParam, lParam);
break;
3、此时呢在产生的WM_USER消息中我们可以加上对托盘图标反键菜单的鼠标点击处理
if (lParam == WM_LBUTTONDOWN);//左键单击不作任何处理
if (lParam == WM_LBUTTONDBLCLK)
{
PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);//左键双击的处理
}
if (lParam == WM_RBUTTONDOWN)
{
ProShellIconMsg(hWnd, wParam, lParam, &nid);//右键单击的处理
}
break;
4、左键双击的处理:
case WM_MYSHOWWINDOW:
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
break;
5、右键单击的处理:
POINT pt;
int xx;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
xx = TrackPopupMenu(hmenu, TPM_RETURNCMD, pt.x, pt.y, NULL, hWnd, NULL);
if (xx == IDR_SHOW)
{
PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);
}
if (xx == IDR_EXIT)
{
Shell_NotifyIcon(NIM_DELETE, pNid);
}
6、此时呢在当我们点击对话框右上角的关闭按钮时ShowWindow(hWnd, SW_HIDE);隐藏我们的主窗口。
我写的这个是基于一个模态对话框的:开始呢定义出我们要用的变量
NOTIFYICONDATA nid;
UINT WM_TASKBARCREATED = 0;
1、首先在WM_INITDIALOG消息中创建出我们的系统托盘图标的反键菜单(如果你需要)
if (pNid == NULL)
{
return;
}
pNid->cbSize = sizeof(NOTIFYICONDATA);
pNid->hWnd = hWnd;
pNid->uID = 0;
pNid->uFlags = NIF_ICON | NIF_MESSAGE | NIF_INFO | NIF_TIP;
pNid->uCallbackMessage = WM_USER;
pNid->hIcon = LoadIcon(NULL, IDI_APPLICATION);
wcscpy(pNid->szInfo, _T("Synchronous Time"));
wcscpy(pNid->szTip, _T("Synchronous Time"));
wcscpy(pNid->szInfoTitle,_T(""));
Shell_NotifyIcon(NIM_ADD, pNid);
hmenu=CreatePopupMenu();
AppendMenu(hmenu, MF_STRING,IDR_SHOW, _T("Show"));
AppendMenu(hmenu, MF_STRING,IDR_EXIT, _T("Exit"));
SetWindowLong(hWnd, GWL_STYLE, GetWindowLong(hWnd, GWL_STYLE) | WS_EX_TOOLWINDOW);
2、处理default消息分支
default:
if (uMsg == WM_TASKBARCREATED)
SendMessage(hWnd, WM_CREATE, wParam, lParam);
break;
3、此时呢在产生的WM_USER消息中我们可以加上对托盘图标反键菜单的鼠标点击处理
if (lParam == WM_LBUTTONDOWN);//左键单击不作任何处理
if (lParam == WM_LBUTTONDBLCLK)
{
PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);//左键双击的处理
}
if (lParam == WM_RBUTTONDOWN)
{
ProShellIconMsg(hWnd, wParam, lParam, &nid);//右键单击的处理
}
break;
4、左键双击的处理:
case WM_MYSHOWWINDOW:
ShowWindow(hWnd, SW_SHOW);
UpdateWindow(hWnd);
break;
5、右键单击的处理:
POINT pt;
int xx;
GetCursorPos(&pt);
SetForegroundWindow(hWnd);
xx = TrackPopupMenu(hmenu, TPM_RETURNCMD, pt.x, pt.y, NULL, hWnd, NULL);
if (xx == IDR_SHOW)
{
PostMessage(hWnd, WM_MYSHOWWINDOW, wParam, lParam);
}
if (xx == IDR_EXIT)
{
Shell_NotifyIcon(NIM_DELETE, pNid);
}
6、此时呢在当我们点击对话框右上角的关闭按钮时ShowWindow(hWnd, SW_HIDE);隐藏我们的主窗口。
相关文章推荐
- Java桌面应用程序创建系统托盘图标
- 使用Win32 API做个系统托盘图标
- VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中
- 转载:WIN32 SDK编程拾遗-系统托盘图标
- c# winform 系统托盘图标的创建与简单使用
- VC增加应用程序图标到系统托盘
- [转]使用Win32 API做个系统托盘图标
- VC增加应用程序图标到系统托盘
- BCB如何将应用程序图标写到系统托盘中
- 如何在系统托盘(panel)中显示应用程序图标和气球帮助信息(balloon tooltips)
- 为自己的应用程序添加系统托盘图标
- VC增加应用程序图标到系统托盘
- c# winform 系统托盘图标的创建与简单使用
- VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中
- PyQt icon创建,显示 PyQt4 -- 系统托盘图标设置
- VC++6.0中实现将应用程序的图标加入到Windows的系统托盘中 zz
- windows API 创建系统托盘图标
- 地磅称量系统之(52)制作应用程序的托盘功能(显示在操作系统的时间左边的小图标)
- windows API 创建系统托盘图标
- 在VS里创建Windows窗体,让其最小化在系统托盘,并显示一个Icon图标