C++让你的任务栏图标动起来
在windows下上网时,有没有注意到屏幕右下方的任务栏上有一个动画图标?它闪烁并生动地显示此时网络正在传输数据。关于任务栏图标编程的文章很多,但是如何才能编译出动态图标呢?在C++Builder中很容易实现。
-它的基本编程思想是:通过设置定时器时钟控件,应用程序可以在指定的时间间隔内发送特定的消息,任务栏图标可以不断变化,从而形成动画效果。方法是在应用程序的窗体中加载几个图像控件,让它们加载相应的图片,几个图片依次显示,就形成了一个动画。
详细说明:这里,我们以一个开门和关门的动画为例,在窗体上放置一个定时器控件和两个图像,并分别加载“开门”和“关门”的两张图片。开始添加代码。
-应用程序必须通过发送消息来通知任务栏添加、删除和修改图标。发送消息必须调用Shell_NotifyIcon。它的原型是:
WINSHELLAPI BOLL WINAPI Shell _ NotifyIcon(
DWORD dwMessage,POINTIFYCONDATA pnid);
第一个参数dwMessage是发送消息的标志,可以选择。
NIM_ADD //在任务栏通知区域添加图标
NIM_DELETE //删除任务栏通知区域的图标
NIM_MODIFY //通知任务栏通知区域修改图标
编译消息发送函数TrayMessage。
bool _ _ fast call t form 1::tray message(DWORD dw message)
{
NOTIFYICONDATA tnd
PSTR·普斯蒂普;
PSZ tip = tip text();
tnd . CB size = sizeof(NOTIFYICONDATA);
//结构的大小
tnd . ucallbackmessage = MYWM _ NOTIFY;
//自定义回调消息,在头文件中声明
tnd.hWnd = Handle
//接受回调消息的窗口句柄
tnd.uID = IDC _ MYICON
//图标编号
tnd . u flags = NIF _消息NIF _图标NIF _提示;
//指定以下三个参数中的哪一个包含有效数据
if (dwMessage == NIM_MODIFY)
{
tnd.hIcon =
(HICON)icon handle();//获取图标句柄
if (pszTip)
lstrcpyn(tnd.szTip,pszTip,
sizeof(tnd . SZ tip));
其他
tnd . SZ tip[0]= ' \ 0 ';
}
其他
{
tnd.hIcon = NULL
tnd . SZ tip[0]= ' \ 0 ';
}
return(Shell _ NotifyIcon(dw message,& tnd));
}
获取图标句柄的功能。
HICON _ _ fast call t form 1::icon handle(void)
{
如果(n==1)
{ return (Image1->图片->图标->句柄);
//n是全局变量,1是显示image1,0是Image2。
}
其他
{ return (Image2->图片->图标->句柄);
}
}
编译图标状态转换函数。
void _ _ fast call t form 1::ToggleState(void)
{
If (n==1) //n是图标句柄锁,是一个全局变量,
1显示图像1,0显示图像2。
{
n = n-1;
}
其他
{
n = n+1;
}
tray message(NIM _ MODIFY);
//发送图标更改消息
}
对计时器控件进行编码并设置其间隔。
属性为1000,即定时器每秒响应一次。定时器
键入事件代码:
void _ _ fast call t form 1::timer 1 timer(to object * Sender)
{ ToggleState();
}
-由于篇幅有限,上面只列出了代码的基本部分。其他功能的实现,比如关闭程序,打开窗口,都比较简单,这里就不赘述了。当程序运行时,您会在屏幕右下角的任务栏中看到一个动画图标,上面有一扇门正在打开和关闭。是不是很有意思?编一个你喜欢的。
位律师回复
0条评论