设为首页 加入收藏

TOP

26.3.3 系统托盘动态图标
2013-10-07 13:13:01 来源: 作者: 【 】 浏览:61
Tags:26.3.3 系统 托盘 动态 图标

26.3.3  系统托盘动态图标

通过定时器,可以实现系统托盘动态图标的效果。在程序启动时,首先设置图标列表,启动定时器,并设置托盘图标和托盘文字。定时器每次获取当前索引下的图标句柄,并调用Shell_NotifyIcon()函数设置托盘上的图标为获取的新图标,这样,看上去系统托盘上显示的是动态图标。代码如下:

  1. BOOL CMainFrame::SetSBImageList(int imageListID,int iMaxIcons, COLORREF tc)  
  2. {                                           // 设置图标列表  
  3.     if(iMaxIcons <= 0) return false;        // 如果最大个数小于或等于0,则返回  
  4.     m_iMaxSBIcon = iMaxIcons;               // 赋值保存图标个数  
  5.     VERIFY(m_SBImgList.Create(imageListID, 16, 1, tc)); // 创建图标列表  
  6.     hSBIcon = m_SBImgList.ExtractIcon(0);                   // 析出图标  
  7.     NOTIFYICONDATA nid;  
  8.     ZeroMemory(&nid, sizeof(NOTIFYICONDATA));               // 初始化内存  
  9.     nid.cbSize = sizeof(NOTIFYICONDATA);                    // 赋值大小  
  10.     nid.hWnd = m_hWnd;                                      // 赋值窗体句柄  
  11.     nid.uID = IDI_ICON_APP;                             // 赋值图标ID  
  12.     nid.uFlags = NIF_TIP | NIF_ICON | NIF_MESSAGE;      // 赋值标记  
  13.     nid.uCallbackMessage = NULL;                        // 赋值回调消息  
  14.     nid.hIcon = hSBIcon;                                // 赋值图标句柄  
  15.     strcpyn(nid.szTip, __TEXT("托盘图标测试!"), 64);      // 复制文本  
  16.     Shell_NotifyIcon(NIM_ADD, &nid);                    // 修改图标  
  17.     return true;                                        // 函数成功返回  

上面的代码除了初始化图标列表外,调用Shell_NotifyIcon()函数设置启动时托盘上的图标为图标列表中的第一个图标,并设置当鼠标滑过托盘图标时的提示文字为"托盘图标测试!"。下面的代码是定时器执行函数。

  1. BOOL CMainFrame::ShowSBNextIcon()                   // 显示下一个图标  
  2. {  
  3.     if(m_SBImgList.m_hImageList == NULL) return false;  
  4.                                                     // 判断图标列表有效性  
  5.     m_iSBIconCounter++;                             // 索引技术增一  
  6.     if(m_iSBIconCounter >= m_iMaxSBIcon)m_iSBIconCounter =0;  
  7.     hSBIcon = m_SBImgList.ExtractIcon(m_iSBIconCounter);    // 析出图标  
  8.     NOTIFYICONDATA nid;  
  9.     ZeroMemory(&nid, sizeof(NOTIFYICONDATA));               // 初始化内存  
  10.     nid.cbSize = sizeof(NOTIFYICONDATA);                    // 设置结构大小  
  11.     nid.hWnd = m_hWnd;                                      // 设置窗体句柄  
  12.     nid.uID = IDI_ICON_APP;                                 // 设置图标  
  13.     nid.uFlags =  NIF_ICON;  
  14.     nid.hIcon = hSBIcon;                                    // 设置图标句柄  
  15.     Shell_NotifyIcon(NIM_MODIFY, &nid);                 // 设置图标  
  16.     if (hSBPrevIcon) DestroyIcon(hSBPrevIcon);              // 销毁句柄  
  17.     hSBPrevIcon = hSBIcon;                                  // 保存图标句柄  
  18.     return true;                                            // 函数成功返回  

上面代码会获取当前索引处的图标句柄,并通过Shell_NotifyIcon()函数的NIM_MODIFY命令来修改托盘上的图标,同时修改当前图标索引。程序运行的效果如图26-4所示。

 
图26-4  系统托盘动
态图标运行效果图
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇26.4.1 播放GIF动画 下一篇26.3.1 标题栏动画图标

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: