windows – 添加到通知托盘的图标在鼠标悬停时消失
发布时间:2020-12-14 02:50:17 所属栏目:Windows 来源:网络整理
导读:我希望我的应用程序在 Windows 7的通知区域中有一个图标.我使用Shell_NotifyIcon添加图标.出现图标,但是当我将鼠标指针移到图标上时,图标会消失.应用程序一直在运行.图标未隐藏,只是消失了. Shell_NotifyIcon返回非零值,表示它成功. 这是相关的代码: static
我希望我的应用程序在
Windows 7的通知区域中有一个图标.我使用Shell_NotifyIcon添加图标.出现图标,但是当我将鼠标指针移到图标上时,图标会消失.应用程序一直在运行.图标未隐藏,只是消失了.
Shell_NotifyIcon返回非零值,表示它成功. 这是相关的代码: static const int ID_TRAYICON = 300; static const int MSG_TRAYICON = WM_USER + 1; NOTIFYICONDATA nid; void InitTrayIconData() { memset(&nid,sizeof(NOTIFYICONDATA)); nid.cbSize = sizeof(NOTIFYICONDATA); nid.hWnd = hwnd; nid.uID = ID_TRAYICON; nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nid.uCallbackMessage = MSG_TRAYICON; nid.hIcon = LoadIcon(nullptr,IDI_APPLICATION); //nid.uVersion = NOTIFYICON_VERSION_4; lstrcpy(nid.szTip,TEXT("Data Aggregator in-dev version")); } 然后在处理WM_CREATE消息时: InitTrayIconData(); Shell_NotifyIcon(NIM_ADD,&nid); 在处理WM_DESTROY时: Shell_NotifyIcon(NIM_DELETE,&nid); 我还注意到,由于某种原因,永远不会调用MSG_TRAYICON消息. 解决方法
我想到了.当我在WM_CREATE中调用InitTrayIconData()时,还没有为全局hwnd分配从CreateWindowEx返回的值(在CreateWindowEx调用之后没有发送WM_CREATE消息,但是在它期间,我不知道).所以这条线,
nid.hWnd = hwnd; 将nid.hWnd等同于nullptr(这是我初始化hwnd的原因). 我通过将WndProc中的hwnd参数传递给InitTrayIconData()来解决问题,因此它将使用该hwnd而不是全局hwnd. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容