-
c语言入门之用C++制作具有HTML风格的动态按钮
在浏览网页时,各种各样制作精美的动态按钮常常令人惊羡不已。这种按钮平常默默无闻,当鼠标经过时,立即一跃而出,在鼠标变为手形的同时,图形也变得更加亮丽,有的还发出特有声音,将你的注意力瞬间抓了过去;而当鼠标移开之后,一切又恢复原样,以免分散你对新焦点的注意。如果我们能用C++ Builder实现这种效果,那么一定会给所开发的应用程序增色不少。
在C++Builder中,适合制作动态按钮的构件是SpeedButton。虽然SpeedButton可以通过1个16×64像素的位图来显示按钮处在抬起、禁止、按下与保持按下的不同状态,但要实现HTML风格的按钮,还得要通过编程来实现。
选择1副所钟意的位图取名为start.bmp。用图形制作软件(如photoshop)将其转换为黑白图形存为start1.bmp。这2个位图分别是按钮在鼠标经过时及平时显示的图形。同时还选取1个声音文件(不要太长),假设其名为crush.wav。
打开纯文本编辑软件(如notepad),输入以下内容:
crush WAV crush.wav
start BITMAP start.bmp
start1 BITMAP start1.bmp
保存为资源文件mysrc.rc。
启动Builder,打开新工程,将资源文件mysrc.rc添加进项目中。你也可以通过BIN目录下的brcc32.exe将RC文件编绎为RES文件,然后用 #program resource "*.res" 语句将其联编进项目中。本文采用更简单的前一种方法。
在当前窗体上加入新的SpeedButton,取名为StartSpeedButton。属性按下表设置:
Caption 空
Cursor crHandPoint
Flat true
Hint 单击以…..
Glyph None
Showhint true
注意:在设计阶段,按钮的Glyph属性最好不要先行指定为start1.bmp。
打开所对应的头文件,在其中的private项中增加
Graphics::TBitmap *start,*start1;//定义位图
Char *chWavHandle;//定义声音句柄
在主表单的CPP文件的表单创键事件(onCreate)所对应的函数中先初始化位图,
start=new Graphics::TBitmap();
start1=new Graphics::TBitmap();
初始化后再载入位图
start->Handle=LoadBitmap(Hinstance, "start");//从内存中载入位图
start1->Handle=LoadBitmap(Hinstance, "start1");
载入声音文件
HRSRC temp=FindResource(Hinstance,"crush", "WAV");//从内存中载入声音
HGLOBAL h=LoadResource(Hinstance,temp);
ChWavHandle=(char *)LockResource(h);
先在浮动按钮上显示普通的黑白图形
StartSpeedButton->Glyph->Assign(start1);
在初始工作完成后,好的习惯应及时释放所占用的资源。在主表单的OnDestroy事件所对应的函数中加入
delete chWavHandle;
delete start1,start;
至此,第一步已经结束,试着运行一下,鼠标形状变化、按钮突起及动态提示已经有了,最后再让我们来完成图形变化及声音提示。
在做这部分工作之前,可回想一下浏览网页的情况。我们的动态按钮的响应步骤应该是:鼠标移入按钮时,图形由黑白变为彩色,同时发出声响(以后称之为点亮按钮);移出时图形再变回黑白,但此时不发出声响。因此应让程序知道什么时候鼠标正好移入、什么时候正好移出。
在头文件的private项中增加状态变量
bool blStart;
在主表单文件的OnCreate中为其设置初始值
blStart=true;//在TRUE状态下,一旦发生OnMouseMove事件就可以点亮按钮
选中SpeedButton按钮,在其OnMouseMove事件所对应的函数StartSpeedButtonMouseMove()中增加
if(blStart)//可以点亮按钮
{
StartSpeedButton->Glyph->Assign(start);//变为彩图
// 通过chWavHandle句柄调用内存中声音文件
SndPlaySound(chWavHandle,SND_MEMORY|SND_SYNC);
blStart=false;// 再发生OnMouseMove事件不可以点亮按钮
}
当然,还必须在鼠标离开按钮时再将图形恢复为黑白。如何才能知道鼠标离开呢?比较原始的办法自然是用鼠标的坐标位置来判断,但这样很费力。一个巧妙的招数是用包含(在位置上)此按钮的其它部件的OnMouseMove事件来判断(注意:选用的外围部件相对于此按钮来说需有足够的纵深,否则,一旦鼠标移动太快,有可能会漏过OnMouseMove事件而发生紊乱。确决的办法是,再加上更外围的部件的OnMouseMove事件来双保险)。
以按钮的外围部件是主表单MainForm为例,在其OnMouseMove事件所对应的函数MainFormMouseMove()中加入
if(!blStart)//鼠标正好由按钮内移出
StartSpeedButton->Glyph->Assign(start1);// 图形恢复黑白
blStart=true;//为鼠标重新进入按钮作准备
最后在主表单CPP文件前部加入为SndPlaySound提供声明的头文件
#include
编绎运行,哈哈,一切正如所想的,我的按钮也具备了HTML风格,你还不赶紧行动。
注:以上程序在 Builder 4.0/win98环境下运行通过。这里所说的主表单也可以是包含动态按钮的表单。
在C++Builder中,适合制作动态按钮的构件是SpeedButton。虽然SpeedButton可以通过1个16×64像素的位图来显示按钮处在抬起、禁止、按下与保持按下的不同状态,但要实现HTML风格的按钮,还得要通过编程来实现。
选择1副所钟意的位图取名为start.bmp。用图形制作软件(如photoshop)将其转换为黑白图形存为start1.bmp。这2个位图分别是按钮在鼠标经过时及平时显示的图形。同时还选取1个声音文件(不要太长),假设其名为crush.wav。
打开纯文本编辑软件(如notepad),输入以下内容:
crush WAV crush.wav
start BITMAP start.bmp
start1 BITMAP start1.bmp
保存为资源文件mysrc.rc。
启动Builder,打开新工程,将资源文件mysrc.rc添加进项目中。你也可以通过BIN目录下的brcc32.exe将RC文件编绎为RES文件,然后用 #program resource "*.res" 语句将其联编进项目中。本文采用更简单的前一种方法。
在当前窗体上加入新的SpeedButton,取名为StartSpeedButton。属性按下表设置:
Caption 空
Cursor crHandPoint
Flat true
Hint 单击以…..
Glyph None
Showhint true
注意:在设计阶段,按钮的Glyph属性最好不要先行指定为start1.bmp。
打开所对应的头文件,在其中的private项中增加
Graphics::TBitmap *start,*start1;//定义位图
Char *chWavHandle;//定义声音句柄
在主表单的CPP文件的表单创键事件(onCreate)所对应的函数中先初始化位图,
start=new Graphics::TBitmap();
start1=new Graphics::TBitmap();
初始化后再载入位图
start->Handle=LoadBitmap(Hinstance, "start");//从内存中载入位图
start1->Handle=LoadBitmap(Hinstance, "start1");
载入声音文件
HRSRC temp=FindResource(Hinstance,"crush", "WAV");//从内存中载入声音
HGLOBAL h=LoadResource(Hinstance,temp);
ChWavHandle=(char *)LockResource(h);
先在浮动按钮上显示普通的黑白图形
StartSpeedButton->Glyph->Assign(start1);
在初始工作完成后,好的习惯应及时释放所占用的资源。在主表单的OnDestroy事件所对应的函数中加入
delete chWavHandle;
delete start1,start;
至此,第一步已经结束,试着运行一下,鼠标形状变化、按钮突起及动态提示已经有了,最后再让我们来完成图形变化及声音提示。
在做这部分工作之前,可回想一下浏览网页的情况。我们的动态按钮的响应步骤应该是:鼠标移入按钮时,图形由黑白变为彩色,同时发出声响(以后称之为点亮按钮);移出时图形再变回黑白,但此时不发出声响。因此应让程序知道什么时候鼠标正好移入、什么时候正好移出。
在头文件的private项中增加状态变量
bool blStart;
在主表单文件的OnCreate中为其设置初始值
blStart=true;//在TRUE状态下,一旦发生OnMouseMove事件就可以点亮按钮
选中SpeedButton按钮,在其OnMouseMove事件所对应的函数StartSpeedButtonMouseMove()中增加
if(blStart)//可以点亮按钮
{
StartSpeedButton->Glyph->Assign(start);//变为彩图
// 通过chWavHandle句柄调用内存中声音文件
SndPlaySound(chWavHandle,SND_MEMORY|SND_SYNC);
blStart=false;// 再发生OnMouseMove事件不可以点亮按钮
}
当然,还必须在鼠标离开按钮时再将图形恢复为黑白。如何才能知道鼠标离开呢?比较原始的办法自然是用鼠标的坐标位置来判断,但这样很费力。一个巧妙的招数是用包含(在位置上)此按钮的其它部件的OnMouseMove事件来判断(注意:选用的外围部件相对于此按钮来说需有足够的纵深,否则,一旦鼠标移动太快,有可能会漏过OnMouseMove事件而发生紊乱。确决的办法是,再加上更外围的部件的OnMouseMove事件来双保险)。
以按钮的外围部件是主表单MainForm为例,在其OnMouseMove事件所对应的函数MainFormMouseMove()中加入
if(!blStart)//鼠标正好由按钮内移出
StartSpeedButton->Glyph->Assign(start1);// 图形恢复黑白
blStart=true;//为鼠标重新进入按钮作准备
最后在主表单CPP文件前部加入为SndPlaySound提供声明的头文件
#include
编绎运行,哈哈,一切正如所想的,我的按钮也具备了HTML风格,你还不赶紧行动。
注:以上程序在 Builder 4.0/win98环境下运行通过。这里所说的主表单也可以是包含动态按钮的表单。
最新更新
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模式