现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

托盘图标的删除和托盘程序的优化

2012-08-31 23:05 工业·编程 ⁄ 共 586字 ⁄ 字号 暂无评论

上一篇讨论了托盘图标的添加,程序退出后虽然系统会自动删除托盘图标,但这种工作最好在程序中完成,以保证程序所有的动作都在我们的代码控制之内.

>>>托盘图标的添加和消息响应

3.删除托盘图标

NOTIFYICONDATA nid; 
 
nid.cbSize = sizeof nid; 
nid.hWnd = GetSafeHwnd(); 
nid.uID = IDR_MAINFRAME; 
nid.uFlags = NIF_MESSAGE | NIF_ICON; 
Shell_NotifyIcon(NIM_DELETE,&nid); 
这些代码与前一篇内容是相关的,理论上讲只要nid.hWnd、nid.uID与添加托盘图标时这两个成员变量的数值对应相等,删除图标就能成功

但事实上,由于我们删除图标时,程序正在退出,往往窗口已经销毁,不管是用GetSafeHwnd还是直接引用m_hWnd都得不到我们添加图标时所用的nid.hWnd的值了,所以上面的代码放在析构函数中最后调用总是失败的。

所以最佳的办法,还是将

NOTIFYICONDATA nid;
这个变量改写成成员变量
NOTIFYICONDATA m_nid;
这样要换图标或者删除图标,都很方便,不用重新定义临时的NOTIFYICON重新赋值。
照这种操作,在删除时,可以直接写这一句就行了:
Shell_NotifyIcon(NIM_DELETE,&m_nid);

给我留言

留言无头像?