VC 创建托盘,托盘tooltip。右键托盘菜单,点击别的地方会隐藏掉的问题。
托盘上的菜单右键弹出后,然后再别的地方,比如桌面,菜单无法隐藏掉,一直在托盘上,除非操作下菜单才能隐藏掉,只需要加上一句话
::SetForegroundWindow(m_nid.hWnd);
就可以解决这个问题。
下面是托盘创建
class CXXXDlg { private: NOTIFYICONDATA m_trayid; //作为托盘ID };
//创建托盘 void CXXXDlg::CreateTray(HICON icon) { m_trayid.cbSize = (DWORD)sizeof(NOTIFYICONDATA); m_trayid.hWnd = this->m_hWnd; m_trayid.uID = 128; m_trayid.uFlags = NIF_ICON|NIF_MESSAGE|NIF_TIP; m_trayid.uCallbackMessage = UM_SHOW_THIRDBIND; m_trayid.hIcon = icon; wcscpy_s(m_trayid.szTip, _T("我是托盘")); Shell_NotifyIcon(NIM_ADD, &m_trayid); }
//显示托盘tooltip void CXXXDlg::ShowTrayTooltip() { m_trayid.cbSize=sizeof(NOTIFYICONDATA); m_trayid.uFlags = NIF_INFO; m_trayid.uVersion = NOTIFYICON_VERSION; m_trayid.uTimeout = 5000; m_trayid.dwInfoFlags = NIIF_INFO; wcscpy_s(m_trayid.szInfoTitle, L"提示" ); //气泡标题 wcscpy_s(m_trayid.szInfo, L"我是托盘tooltip"); //气泡内容 Shell_NotifyIcon( NIM_MODIFY, &m_trayid); }
LRESULT CXXXDlg::onShowTask(WPARAM wParam,LPARAM lParam) //托盘响应消息 { if(wParam !=128) return 1; switch(lParam) { case WM_RBUTTONUP: { ::SetForegroundWindow(m_nid.hWnd); //点击别的地方,托盘隐藏 LPPOINT lpoint=new tagPOINT; ::GetCursorPos(lpoint); m_menu.GetSubMenu(0)->TrackPopupMenu(TPM_LEFTALIGN | TPM_LEFTBUTTON | TPM_RIGHTBUTTON, lpoint->x, lpoint->y, this); delete lpoint; break; } case WM_LBUTTONDBLCLK: { this->ShowWindow(SW_SHOW); SetForegroundWindow(); } break; } return 0; }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器