1、生成托盘图标
void AddTrayIcon()
{
NOTIFYICONDATA trayIcon;
memset(&m_trayIcon, 0, sizeof(NOTIFYICONDATA));
trayIcon.cbSize = sizeof(NOTIFYICONDATA);
trayIcon.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_SMALL)); //定义图标,IDI_SMALL-图标资源
trayIcon.hWnd = m_hWnd;
lstrcpy(trayIcon.szTip, _T("托盘"));
trayIcon.uCallbackMessage = WM_SHOWTASK;
trayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD, &trayIcon);//发送消息
ShowWindow(SW_HIDE);
}
2、生成托盘菜单
//在duilib中的HandleMessage函数中添加
if (lParam == WM_RBUTTONDOWN)
{
//获取鼠标坐标
POINT pt; GetCursorPos(&pt);
//右击后点别地可以清除“右击出来的菜单”
SetForegroundWindow(m_hWnd);
//托盘菜单 win32程序使用的是HMENU,如果是MFC程序可以使用CMenu
HMENU hMenu;
//生成托盘菜单
hMenu = CreatePopupMenu();
//添加菜单,关键在于设置的一个标识符 WM_ONCLOSE 点击后会用到
AppendMenu(hMenu, MF_STRING, WM_ONCLOSE, _T("退出"));
//弹出菜单,并把用户所选菜单项的标识符返回
int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd, NULL);
//如果标识符是WM_ONCLOSE则关闭
if (cmd == WM_ONCLOSE)
{
m_trayIcon.hIcon = NULL;
Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);
CStartUpdateProcess::GetInstance().killUpdateProcess();
//退出程序
::PostQuitMessage(0);
}
}