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

用C++Builder实现任务栏图标动画效果 (转)[@more@]


主页:.NET/">http://www.maxss.net
Mailto:邮件:maxchou@163.com">邮件: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()。

  至于具体功能的实现细节这里就不费笔墨了,大家可以 DOWNLOAD/mss/tray_ani_src.rar" rel="nofollow"> 下载任务栏图标动画示例源码进行查看,该示例在BCB6 + Windows 2000下编译通过。欢迎交流!

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10752019/viewspace-959266/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10752019/viewspace-959266/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值