系统托盘动态图标



通过定时器,可以实现系统托盘动态图标的效果。在程序启动时,首先设置图标列表,启动定时器,并设置托盘图标和托盘文字。定时器每次获取当前索引下的图标句柄,并调用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命令来修改托盘上的图标,同时修改当前图标索引。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值