void AddTrayIcon() {
memset(&m_trayIcon, 0, sizeof(NOTIFYICONDATA));
m_trayIcon.cbSize = sizeof(NOTIFYICONDATA);
Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);
if (isconnect_) {
m_trayIcon.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_ICON2));
} else {
m_trayIcon.hIcon = ::LoadIcon(GetModuleHandle(NULL), MAKEINTRESOURCE(IDI_TESTDUILIB));
}
m_trayIcon.hWnd = m_hWnd;
lstrcpy(m_trayIcon.szTip, _T("太空桥"));
m_trayIcon.uCallbackMessage = WM_SHOWTASK;
m_trayIcon.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD, &m_trayIcon);
ShowWindow(SW_HIDE);
}
LRESULT OnTrayIcon(UINT uMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled) {
//如果在图标中单击左键则还原
if (lParam == WM_LBUTTONDOWN) {
//显示主窗口
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);
}
//如果在图标中单击右键则弹出声明式菜单
if (lParam == WM_RBUTTONDOWN) {
//获取鼠标坐标
POINT pt;
GetCursorPos(&pt);
//右击后点别地可以清除“右击出来的菜单”
SetForegroundWindow(m_hWnd);
//托盘菜单
HMENU hMenu;
//生成托盘菜单
hMenu = CreatePopupMenu();
//添加菜单
AppendMenu(hMenu, MF_STRING, IDI_DISCONNECT, _T("断开"));
AppendMenu(hMenu, MF_STRING, IDI_EXIT, _T("退出"));
//弹出菜单,并把用户所选菜单项的标识符返回
int cmd = TrackPopupMenu(hMenu, TPM_RETURNCMD, pt.x, pt.y, NULL, m_hWnd, NULL);
char* pName = "isprac.exe";
switch (cmd) {
case IDI_DISCONNECT:
isconnect_ = false;
AddTrayIcon();
ShowWindow(SW_SHOWNORMAL);
Shell_NotifyIcon(NIM_DELETE, &m_trayIcon);
KillProcess(pName);
UpdataState(kWaitConnect);
break;
case IDI_EXIT:
timeKillEvent(timecntHandle_);
PostMessage(WM_CLOSE);
break;
}
}
bHandled = true;
return (0);
}
duilib托盘设置及菜单设计
最新推荐文章于 2024-03-24 09:36:07 发布