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

原创 2012年03月23日 14:07:34

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

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);

XP/WIN7系统中删除残留托盘图标的方法

对于使用托盘图标的程序,当我们通过强制结束进程,或者程序异常退出时,托盘图标区域总会有托盘图标的残留,需要我们用鼠标移到残留区域时,托盘图标才会自动消失。有时我们需要去做相关的处理,比如在软件升级时,...
  • chenlycly
  • chenlycly
  • 2012年06月16日 21:59
  • 3007

VC下添加和删除系统托盘图标,处理响应事件(Shell_NotifyIcon)

分步骤如下: 1,定义用户消息 #define WM_TRAY_NOTIFY (WM_USER + 8118) 2,添加托盘图标 NOTIFYICONDATA data; memset(&da...
  • sandro_zhang
  • sandro_zhang
  • 2011年11月01日 16:08
  • 4115

【进程处理】4,刷新任务栏托盘区,清除异常关闭进程的残留图标

1,目的 之前介绍了枚举进程并关闭进程的方法,可是有一个问题,使用TerminateProcess关闭的进程如果生成过托盘图标,这个图标就会停留在右下角的托盘区(因为该进程来不及执行自己的图标清理...
  • dpsying
  • dpsying
  • 2014年02月28日 15:49
  • 7299

实现将程序图标显示在系统托盘

长久以来,一直很好奇类似QQ等软件的图标是如何显示在系统托盘的,这次有个项目正好用到,所以就研究了一下。具体方法如下:1、首先我们需要在工具栏找到NotifyIcon这个控件,找到后将其拖到Form中...
  • dragonpeng2008
  • dragonpeng2008
  • 2011年07月25日 11:03
  • 1863

隐藏任意系统托盘图标程序

  • 2010年08月11日 17:33
  • 323KB
  • 下载

win32创建应用程序的系统托盘图标

前段时间工作需要,做了一个应用程序并且是要带有系统托盘图标的,虽然网上还是有很多的相关代码介绍,但是这里还是想写一下,做一个记录吧,简单介绍下过程以及API的调用步骤。     我写的这个是基于一个...
  • cjmscofiled
  • cjmscofiled
  • 2014年02月14日 13:56
  • 3032

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

上一篇讨论了托盘图标的添加,程序退出后虽然系统会自动删除托盘图标,但这种工作最好在程序中完成,以保证程序所有的动作都在我们的代码控制之内 3.删除托盘图标 NOTIFYICONDATA...
  • Cashey1991
  • Cashey1991
  • 2012年03月23日 14:07
  • 3369

易语言刷新重置清除系统托盘图标

  • 2013年04月01日 13:44
  • 12KB
  • 下载

windows API 创建系统托盘图标

系统托盘在我们使用的程序中很普遍,下面我们来看一个很不错的例子,使用Win32 API实现,对理解系统托盘有些帮助。 #include #define IDR_PAUSE 12 #define I...
  • end_ing
  • end_ing
  • 2014年02月13日 17:44
  • 3198

windows程序托盘图标以及消息提示--示例程序

之前两个博客介绍一些基本姿势,都是msdn上的,今天就介绍一下如何使用吧。为了简单起见,还是创建一个MFC based on dialog 功能吧。1创建托盘图标,封装了成一个函数:NOTIFYICO...
  • wangshubo1989
  • wangshubo1989
  • 2015年10月31日 14:56
  • 3206
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:托盘图标的删除和托盘程序的优化
举报原因:
原因补充:

(最多只允许输入30个字)