用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
    评论
C++Builder 资料库 提供50多个例子,带目录 1.怎样在C++Builder中创建使用DLL 2.用C++Bulider在WIN.INI中保存信息 3.如何在C++Builder中检测硬件 4.C++Builder如何响应消息及自定义消息 5.利用C++ Builder开发动画DLL 6.用C++ Builder 3制作屏幕保护程序 7.TCP/IP头格式 8.UDP 9.判断windows的Desktop及其它目录 10用C++Builder创建数字签名 11用Enter 键控制焦点切换的方法 12.拦 截 Windows 消 息 13.使用CommaText 14.程序开始时先显示信息框 15.怎样获取程序的命令行参数? 16.如何监视剪贴板 17.如何使用OnIdle事件 18.用C++Builder编写串行异步通信程序 19.C++BUILDER非可视组件的消息处理技巧 20.用C++Builder 建立数据库VCL使用经验 21.用C++ Builder创建基于Internet的点对点Chat 22.用C++Builder获取应用程序图标 23.BIG5到GB的转换技术 24.C++BUILDER让你的任务栏图标动起来 25.TFORM 26.用BCB在windows桌面创建快捷方式 27.读磁片磁区 28.I/O 端口读写的实现 29.检测鼠标位置 30.令Win32 应用程序跳入系统零层 31.如何取得Memo的行和列 32.使用Sockets 33.Windows95/98下怎样隐藏应用程序不让它出现在CTRL-ALT-DEL对话框中? 34.怎样隐藏应用程序的任务图标 35.编写自己的Ping.exe程序 36.用C++Builder在WINNT下编制一个Service 37.如何在C++ BUILDER中自动关闭WINDOWS屏保 38.显示/隐藏任务栏图标 39.信箱监视程序 40.C++Building制作闹钟 41.拨号上网IP地址的检知 42.用C++ Builder编写Tray程序 43.怎样用代码来最小化或恢复程序 44.制作主窗口显示前的版权窗口 45.判断是否已经联到 internet 46.获取登陆用户名 47.隐藏桌面图标 48.程序启动时运行 49.控制面板的调用 50.模拟键盘按键 51.让标题栏闪烁 52.启动屏幕保护 53.年月日星期的取法 54.键盘事件 55.隐藏任务栏 56.禁止关机 57.怎样以最小化方式启动程序 58.在Memo中增加一行后,如何使最后一行能显示 59.设置壁纸方法

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值