如何正确更新托盘通知图标
How to properly update tray notification icon?
我创建了我的图标:
//'ghIcon' of type HICON
ghIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(IDI_ICON1), IMAGE_ICON, nCx, nCy, 0);
,然后设置它显示在系统托盘上:
NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hMyWnd;
nid.uID = TRAY_ICON_ID1;
nid.uFlags = NIF_ICON;
nid.uCallbackMessage = TRAY_NOTIFICATION_ID1;
nid.hIcon = ghIcon;
Shell_NotifyIcon(NIM_ADD, &nid);
然后在某个时候我想用一个新图标替换它:
if(ghIcon)
{
//Delete old icon first
DestroyIcon(ghIcon);
}
//Load new icon
ghIcon = LoadImage(m_hInstance, MAKEINTRESOURCE(IDI_ICON2), IMAGE_ICON, nCx, nCy, 0);
NOTIFYICONDATA nid;
memset(&nid, 0, sizeof(nid));
nid.cbSize = sizeof(nid);
nid.hWnd = hMyWnd;
nid.uID = TRAY_ICON_ID1;
nid.uFlags = NIF_ICON;
nid.hIcon = ghIcon;
Shell_NotifyIcon(NIM_MODIFY, &nid);
我的问题是,我可以删除以前的图标,而它仍然在系统托盘中选择,就像我上面显示的?或者,我是否需要先将其更改为其他内容,然后在其上调用DestroyIcon
?
p。我的实际示例显然不像上面展示的那么简单。我只是对这个概念很好奇。
系统托盘不保留您给它的HICON
。它创建了一个私人副本。所以你可以在任何你想要的时候自由地摧毁你的图标。你不必保留它,你可以在调用Shell_NotifyIcon()
之前加载它,然后在Shell_NotifyIcon()
退出后立即销毁它。
nid.hIcon = LoadImage(...);
Shell_NotifyIcon(NIM_ADD, &nid);
DestroyIcon(nid.hIcon);
nid.hIcon = LoadImage(...);
Shell_NotifyIcon(NIM_MODIFY, &nid);
DestroyIcon(nid.hIcon);
相关文章:
- 函数如何通知用户它基于函数原型抛出异常?
- 如何在ECS框架中更新组件数据和通知系统
- 当 I2C 值在C++中发生变化时收到通知
- 如何设计具有不同类型的通知和观察器的观察者模式?
- 当可输入框在窗口中处于活动状态时获得通知的任何方法
- 如何为 C++ Visual Studio 2019 指定应用程序图标?
- 是否有必要获取锁并在不需要唤醒线程时通知condition_variable?
- 从 wxWidgets 中的.DLL加载图标
- 如何在点击通知时捕获用户的点击操作
- 在通知提升间处理条件变量时未按住锁会导致问题
- 如何修复加载图标()函数不显示图标?
- QT Framewrok 和 Visual Studio - 图标冲突
- 通知条件变量后使用互斥锁
- 如何在 c++ 中将图标放在按钮上?
- notifyicondata图标通知C
- 清除通知托盘图标,窗口外壳
- Qt-没有托盘图标的通知,可能
- 通知图标接收WM_LBUTTONDBLCLK,但不接收WM_CONTEXTMENU
- 如何正确更新托盘通知图标
- c++事件处理点击通知区域图标Windows