比如说,我创建了我的图标:
//'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
?
PS:我的实际示例显然不像我上面展示的那么简单。我只是对概念感到好奇。
Shell_NotifyIcon()
内部工作的公共知识。 - Remy LebeauShell_NotifyIcon()
API的MSDN页面上,不是吗? - c00000fd