用C++Builder实现任务栏图标动画效果


主页:http://www.maxss.net
邮件:maxchou@163.com


  Windows平台为应用程序提供许多的特色功能,任务图栏就是一个非常实用和经典的一个。它不但可以节省任务栏的空间,还可以通过不同的图标或动画效果来说明程序的当前状态等的信息。Windows里没有直接提供任务栏图标动画效果的支持,所以要自己通过编码实现,在这篇文章里大家可以看到其中一种实现任务栏图标动画效果的方法。

  首先要了解一下有关任务栏图标编程的知识,要实现对任务栏图标的控制主要是通过Shell_NotifyIcon()函数进行。该函数的API声明如下:

BOOL Shell_NotifyIcon(
    DWORD dwMessage, 
    PNOTIFYICONDATA lpdata
);

  参数dwMessage是指定进行什么样的动作,可选值有:NIM_ADD, NIM_DELETE, NIM_MODIFY, NIM_SETFOCUS, NIM_SETVERSION,分别代表为:添加、删除、修改、获得焦点、设置版本号,对于NIM_SETFOCUS,NIM_SETVERSION一般比较少用,我们最常使用的主要是NIM_ADD ,NIM_DELETE, NIM_MODIFY。

  另一个参数lpdata是一个 NOTIFYICONDATA结构的指针,这个结构内容比较多,定义如下:
typedef struct _NOTIFYICONDATA { 
    DWORD cbSize; 
    HWND hWnd; 
    UINT uID; 
    UINT uFlags; 
    UINT uCallbackMessage; 
    HICON hIcon; 
    #if (_WIN32_IE < 0x0500)
        TCHAR szTip[64];
    #else
        TCHAR szTip[128];
    #endif
    #if (_WIN32_IE >= 0x0500)
        DWORD dwState; 
        DWORD dwStateMask; 
        TCHAR szInfo[256]; 
        union {
            UINT  uTimeout; 
            UINT  uVersion; 
        } DUMMYUNIONNAME;
        TCHAR szInfoTitle[64]; 
        DWORD dwInfoFlags; 
    #endif
    #if (_WIN32_IE >= 0x600)
        GUID guidItem;
    #endif
} NOTIFYICONDATA, *PNOTIFYICONDATA; 

  在这里我们主要留意上面粗体的成员 cbSize, hWnd, uID, uFlags, uCallbackMessage, hIcon, szTip等的内容及用法。分别代表的意思是:结构体大小,窗口句柄,图标标识,回调函数,所包含的内容标志,图标句柄,文本提示。

  我们要定义自己的通知消息和图标标识来进行处理,内容如下:(这些内容在窗体的头文件中定义)
const int WM_NC_NOTIFY = (WM_USER + 1); // 自定义的通知消息
const int WM_NC_TRAYID = (WM_USER + 2); // 自定义的图标标识

  一般情况下,都是在用户把应用程序最小化后才在任务栏显示小图标,所以我们还必须捕获系统消息 WM_SYSCOMMAND中wParam参数所带最小化命令,然后再进行有关的处理。另外最重要的就是要捕获自定义通知消息WM_NC_NOTIFY了,这些内容定义如下:(在窗体类的private内定义)
BEGIN_MESSAGE_MAP
	VCL_MESSAGE_HANDLER(WM_SYSCOMMAND, TMessage, WMSysCommand);
	VCL_MESSAGE_HANDLER(WM_NC_NOTIFY, TMessage, WMNCNotify)
END_MESSAGE_MAP(TForm)

  为了要实现动画效果,我们就需要有一个ImageList和Timer对象。ImageList中存放了每一帧的图标,Timer是定时改变 NOTIFYICONDATA结构中的图标句柄来实现动画效果。主要建立几个功能函数实现,分别是添加图标AddTrayIcon(),修改图标ModifyTrayIcon(),删除图标DeleteTrayIcon()。

  至于具体功能的实现细节这里就不费笔墨了,大家可以 下载任务栏图标动画示例源码进行查看,该示例在BCB6 + Windows 2000下编译通过。欢迎交流!
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MAX°孟兆

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值