如何在系统托盘上动态图标的实现

本文介绍了如何在系统托盘区域创建动态图标,通过使用NOTIFYICONDATA结构和Shell_NotifyIcon函数,以及在Delphi中处理WM_SHELLNOTIFY消息来响应图标事件。同时,文章还展示了如何实现类似Windows开始菜单中菜单左侧的图片效果,通过窗体模拟菜单,利用TrayIcon控件和ImageList实现动态图标切换。
摘要由CSDN通过智能技术生成

一个数据结构NOTIFYICONDATA  
一个调用函数Shell_NotifyIcon  
   
   
  NotifyIconData.cbSize   =   sizeof(NOTIFYICONDATA);  
  NotifyIconData.hIcon   =   要使用的图标句柄  
  NotifyIconData.hWnd   =   父窗口句柄;  
  NotifyIconData.szTip,指向要提示的信息  
                                      可以这样      
                                      strcpy(NotifyIconData.szTip,"提示信息");  
  NotifyIconData.uCallbackMessage   =   WM_SHELLNOTIFY;回调的的消息  
  NotifyIconData.uFlags   =   NIF_ICON   |   NIF_MESSAGE   |   NIF_TIP;  
  NotifyIconData.uID   =   1;  
                                      NIM_ADD-增加,NIM_DEL删除托盘小图标  
  Shell_NotifyIcon(NIM_ADD,&NotifyIconData);
Top

2 楼
  BEGIN_MESSAGE_MAP(CMainFrame,   CFrameWnd)  
  //{ {AFX_MSG_MAP(CMainFrame)  
  ON_WM_CREATE()  
  ON_WM_DESTROY()  
  //}}AFX_MSG_MAP  
  ON_MESSAGE(WM_SHELLNOTIFY,OnShellNotify)//加

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
trayicon类的使用 //新建一个基于单文档的工程 //将trayicon类引入工程,并引入图标作为动态显示用 //在工程中新建一个菜单ID为IDR_TRAYPOPUP,添加两个命令ID:ID_SHOWWINDOW 和 ID_HIDEWINDOW //并利用类向导在CMainFrame类中为它们添加命令处理函数 void CMainFrame::OnShowwindow() { // 显示窗口 this->ShowWindow(SW_SHOW); } void CMainFrame::OnHidewindow() { // 隐藏窗口 this->ShowWindow(SW_HIDE); } //在类CMainFrame头文件前添加 #include "ntray.h" #define MAXICONS (int)9 //定义图标的最大数目,具体工程具体修改数目 #define DELAY (DWORD)100 //定义动画图标的时间延迟 //在DECLARE_MESSAGE_MAP()前添加自定义消息 afx_msg LRESULT OnTrayNotification(WPARAM wParam, LPARAM lParam); //声明trayicon类对象 CTrayNotifyIcon m_TrayIcon; //声明图标数组 HICON m_hIcons[MAXICONS]; //在CMainFrame的实现文件中添加消息宏ID #define WM_TRAYNOTIFY (WM_USER + 100) //在BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) 和 END_MESSAGE_MAP()之间添加消息映射 ON_MESSAGE(WM_TRAYNOTIFY, OnTrayNotification) //在CMainFrame的实现文件中定义消息处理函数 LRESULT CMainFrame::OnTrayNotification(WPARAM wParam, LPARAM lParam) { //Delegate all the work back to the default implementation in //CTrayNotifyIcon. return m_TrayIcon.OnTrayNotification(wParam, lParam); } //在CMainFrame的构造函数中添加icon的初始化代码 for (int i=0; i<MAXICONS; i++) { //任务栏图标,注意引入的图标的ID值为连续的,且IDI_ICON1的值为图标ID中最小的 m_hIcons[i] = AfxGetApp()->LoadIcon(IDI_ICON1 + i); } //在CMainFrame的OnCreate(LPCREATESTRUCT lpCreateStruct) 函数中添加 if (!m_TrayIcon.Create(this, IDR_TRAYPOPUP, _T("提示信息"), m_hIcons, MAXICONS, DELAY, WM_TRAYNOTIFY)) { AfxMessageBox(_T("Failed to create tray icon"), MB_OK | MB_ICONSTOP); return -1; } //在需要使用动态图标或静态图标处加入以下代码 if (m_TrayIcon.UsingAnimatedIcon())//判断是否处于动态显示状态 { m_TrayIcon.SetIcon(m_hIcons[0]);//设置通知区为静态图标 m_TrayIcon.SetTooltipText(_T("静止也美!")); } else { m_TrayIcon.SetIcon(m_hIcons, MAXICONS, DELAY);//设置通知区为动态图标 m_TrayIcon.SetTooltipText(_T("运动才美!")); }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值