-
c语言入门之C++ Builder让你的任务栏图标动起来
在windows环境下上网时,你有没有注意到在屏幕的右下脚的任务栏上有一个动画图标呢?它一闪一闪的,形象的表示出网络此时正在传输数据。关于任务栏图标编程的文章有不少,可是如何才能编制出动态图标呢?在C++Builder中可以比较方便的实现。
其基本编程思路是:通过设置Timer时钟控件使应用程序在规定的时间间隔内发送特定的消息,使任务栏图标不断更改,从而形成动画效果。实现方法为在应用程序的表单中加载几个Image控件,使他们装载相应的图画,几幅图画按顺序连续的被显示,就形成了动画。
在这里,我们用一个门的开关动画来做例子,在表单上放置一个Timer控件,两个Image,分别装载“开门”和“关门”两幅图。开始加入代码。
应用程序必须用发送消息的办法通知任务栏增加,删除,和修改图标。发送消息必须调用Shell_NotifyIcon。它的原形为: WINSHELLAPI BOLL WINAPI Shell_NotifyIcon( DWORD dwMessage, POINTIFYCONDATA pnid);
第一个参数 dwMessage是发送消息的标志,可以选
NIM_ADD // 往任务栏通知区添加图标
NIM_DELETE //往任务栏通知区删除图标
NIM_MODIFY//通知任务栏通知区修改图标 编制消息发送函数
TrayMessage bool __fastcall TForm1::TrayMessage(DWORD dwMessage)
{
NOTIFYICONDATA tnd; PSTR pszTip;
pszTip = TipText(); tnd.cbSize= sizeof(NOTIFYICONDATA); //结构的大小
tnd.uCallbackMessage = MYWM_NOTIFY; //自定义回调消息,在头文件中声明
tnd.hWnd= Handle; //接受回调消息的窗口句柄
tnd.uID = IDC_MYICON; //图标标志号
tnd.uFlags= NIF_MESSAGE | NIF_ICON | NIF_TIP; //指定以下三个参数哪个包含有效数据
if (dwMessage == NIM_MODIFY)
{
tnd.hIcon = (HICON)IconHandle(); //取得图标句柄
if (pszTip) lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); else tnd.szTip[0] = '\0';
}
else
{
tnd.hIcon = NULL; tnd.szTip[0] = '\0';
}
return (Shell_NotifyIcon(dwMessage, &tnd));
}
编制取得图标句柄的函数
HICON __fastcall TForm1::IconHandle(void)
{
if (n==1)
{
return (Image1- >Picture->Icon- >Handle); //n是全局变量,1为显示Image1,0为Image2
}
else
{
return (Image2- >Picture- >Icon- >Handle);
}
}
编制图标状态转换函数
void __fastcall TForm1::ToggleState(void)
{
if (n==1) //n为图标句柄锁,是全局变量, 1为显示Image1,0为Image2
n=n-1;
else n=n+1;
TrayMessage(NIM_MODIFY); //发送图标变换消息
}
对Timer控件编制代码,设它的Interval 属性为1000,即定时器每一秒响应一次。为 Ontimer 事件键入代码:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ToggleState( );
}
由于篇幅有限,以上只列出了基本部分的代码,其他功能的实现,如关闭程序,打开窗口等,比较简单,不在赘述。程序运行时,你将看到在屏幕的右下角任务栏有一扇门打开又关闭的动画图标。是不是很有趣,快编一个你喜欢的吧。
其基本编程思路是:通过设置Timer时钟控件使应用程序在规定的时间间隔内发送特定的消息,使任务栏图标不断更改,从而形成动画效果。实现方法为在应用程序的表单中加载几个Image控件,使他们装载相应的图画,几幅图画按顺序连续的被显示,就形成了动画。
在这里,我们用一个门的开关动画来做例子,在表单上放置一个Timer控件,两个Image,分别装载“开门”和“关门”两幅图。开始加入代码。
应用程序必须用发送消息的办法通知任务栏增加,删除,和修改图标。发送消息必须调用Shell_NotifyIcon。它的原形为: WINSHELLAPI BOLL WINAPI Shell_NotifyIcon( DWORD dwMessage, POINTIFYCONDATA pnid);
第一个参数 dwMessage是发送消息的标志,可以选
NIM_ADD // 往任务栏通知区添加图标
NIM_DELETE //往任务栏通知区删除图标
NIM_MODIFY//通知任务栏通知区修改图标 编制消息发送函数
TrayMessage bool __fastcall TForm1::TrayMessage(DWORD dwMessage)
{
NOTIFYICONDATA tnd; PSTR pszTip;
pszTip = TipText(); tnd.cbSize= sizeof(NOTIFYICONDATA); //结构的大小
tnd.uCallbackMessage = MYWM_NOTIFY; //自定义回调消息,在头文件中声明
tnd.hWnd= Handle; //接受回调消息的窗口句柄
tnd.uID = IDC_MYICON; //图标标志号
tnd.uFlags= NIF_MESSAGE | NIF_ICON | NIF_TIP; //指定以下三个参数哪个包含有效数据
if (dwMessage == NIM_MODIFY)
{
tnd.hIcon = (HICON)IconHandle(); //取得图标句柄
if (pszTip) lstrcpyn(tnd.szTip, pszTip, sizeof(tnd.szTip)); else tnd.szTip[0] = '\0';
}
else
{
tnd.hIcon = NULL; tnd.szTip[0] = '\0';
}
return (Shell_NotifyIcon(dwMessage, &tnd));
}
编制取得图标句柄的函数
HICON __fastcall TForm1::IconHandle(void)
{
if (n==1)
{
return (Image1- >Picture->Icon- >Handle); //n是全局变量,1为显示Image1,0为Image2
}
else
{
return (Image2- >Picture- >Icon- >Handle);
}
}
编制图标状态转换函数
void __fastcall TForm1::ToggleState(void)
{
if (n==1) //n为图标句柄锁,是全局变量, 1为显示Image1,0为Image2
n=n-1;
else n=n+1;
TrayMessage(NIM_MODIFY); //发送图标变换消息
}
对Timer控件编制代码,设它的Interval 属性为1000,即定时器每一秒响应一次。为 Ontimer 事件键入代码:
void __fastcall TForm1::Timer1Timer(TObject *Sender)
{
ToggleState( );
}
由于篇幅有限,以上只列出了基本部分的代码,其他功能的实现,如关闭程序,打开窗口等,比较简单,不在赘述。程序运行时,你将看到在屏幕的右下角任务栏有一扇门打开又关闭的动画图标。是不是很有趣,快编一个你喜欢的吧。
最新更新
Objective-C语法之代码块(block)的使用
VB.NET eBook
Add-in and Automation Development In VB.NET 2003 (F
Add-in and Automation Development In VB.NET 2003 (8
Add-in and Automation Development in VB.NET 2003 (6
Add-in and Automation Development In VB.NET 2003 (5
AddIn Automation Development In VB.NET 2003 (4)
AddIn And Automation Development In VB.NET 2003 (2)
Addin and Automation Development In VB.NET 2003 (3)
AddIn And Automation Development In VB.NET 2003 (1)
2个场景实例讲解GaussDB(DWS)基表统计信息估
常用的 SQL Server 关键字及其含义
动手分析SQL Server中的事务中使用的锁
openGauss内核分析:SQL by pass & 经典执行
一招教你如何高效批量导入与更新数据
天天写SQL,这些神奇的特性你知道吗?
openGauss内核分析:执行计划生成
[IM002]Navicat ODBC驱动器管理器 未发现数据
初入Sql Server 之 存储过程的简单使用
SQL Server -- 解决存储过程传入参数作为s
武装你的WEBAPI-OData入门
武装你的WEBAPI-OData便捷查询
武装你的WEBAPI-OData分页查询
武装你的WEBAPI-OData资源更新Delta
5. 武装你的WEBAPI-OData使用Endpoint 05-09
武装你的WEBAPI-OData之API版本管理
武装你的WEBAPI-OData常见问题
武装你的WEBAPI-OData聚合查询
OData WebAPI实践-OData与EDM
OData WebAPI实践-Non-EDM模式