用C++制作具有HTML风格的动态按钮

用C++制作具有HTML风格的动态按钮,第1张

用C++制作具有HTML风格的动态按钮,第2张

浏览网页时,各种制作精美的动态按钮往往让人叹为观止。这种按钮通常不为人知。当老鼠经过时,它立刻跳出来。当鼠标变成手形时,图形变得更加漂亮,有的甚至会发出独特的声音,瞬间抓住你的注意力。当鼠标移开后,一切都会恢复原状,以免分散你对新焦点的注意力。如果能用C++ Builder实现这种效果,一定会给开发出来的应用增色不少。

在C++Builder中,适合制作动态按钮的组件是SpeedButton。虽然SpeedButton可以通过一个16×64像素的位图来显示按钮的抬起、禁止、按下和保持按下的不同状态,但是要实现HTML风格的按钮,还得通过编程来实现。

选择一个喜欢的位图,命名为start.bmp使用图形制作软件(如photoshop)转换成黑白图形,保存为start1.bmp这两个位图是鼠标经过时和平时按钮显示的图形。同时选择1个声音文件(不要太长),假设其名称为crush.wav

打开一个纯文本编辑软件(如记事本)并输入以下内容:

粉碎wav粉碎. WAV

启动位图start.bmp

start1位图start1.bmp

另存为资源文件mysrc.rc..

启动构建器,打开一个新项目,并将资源文件mysrc.rc添加到该项目中。也可以通过BIN目录下的brcc32.exe将RC文件编译成RES文件,然后使用#program resource "*。res "语句将它们绑定到项目中。本文采用更简单的前一种方法。

向当前窗体添加一个新的SpeedButton,并将其命名为StartSpeedButton。根据下表设置属性:

Caption 空

光标光标点

完全正确

提示单击以…..

字形无

显示提示true

注意:在设计阶段,首先不要将按钮的Glyph属性指定为start1.bmp。

打开相应的头文件并将其添加到私有项中。

Graphics::TBitmap *start,* start 1;//定义位图

Char * chWavHandle//定义声音句柄

在主窗体的CPP文件的窗体onCreate事件对应的函数中初始化位图,

start =新图形::tbit map();

start1 =新图形::tbit map();

初始化并加载位图。

start-> Handle = load bitmap(hin instance," start ");//从内存中加载位图

start 1-> Handle = load bitmap(h instance," start 1 ");

加载声音文件

HR src temp = find resource(h instance," crush "," WAV ");//从内存加载声音

h global h = load resource(h instance,temp);

chwavlhandle =(char *)lock resource(h);

首先在浮动按钮上显示普通的黑白图形。

StartSpeedButton-> Glyph-> Assign(start 1);

初始工作完成后,好习惯要及时释放被占用的资源。添加到与主窗体的OnDestroy事件对应的函数中。

删除chWavHandle

删除start1,start;

至此,第一步结束。试着运行它。鼠标形状改变、按钮突出和动态提示已经存在。最后,我们来完成图形变化和声音提示。

在做这部分工作之前,可以回忆一下浏览网页的情况。我们的动态按钮的响应步骤应该是:当鼠标移入按钮时,图形由黑白变为彩色,同时发出声音(以下简称灯按钮);移出时,图形会变回黑白,但此时不会发出声音。所以,程序要知道鼠标什么时候刚移入,什么时候移出。

在头文件的私有项中添加一个状态变量。

bool blStart

在主表单文件的OnCreate中设置初始值。

blStart = true//在TRUE状态下,一旦OnMouseMove事件发生,按钮可以被点亮。

选择SpeedButton按钮,并将其添加到与其OnMouseMove事件对应的函数startspeedbuttOnMouseMove()中。

If(blStart)//按钮可以点亮。

{

StartSpeedButton-> Glyph-> Assign(开始);//变成彩色地图

//通过chWavHandle句柄调用内存中的声音文件

SndPlaySound(chwavlhandle,SND _ MEMORY | SND _ SYNC);

blStart = false//如果OnMouseMove事件再次发生,按钮无法点亮。

}

当然,当鼠标离开按钮时,图形必须恢复为黑白。我怎么知道老鼠是否离开了?原来的方法自然是通过鼠标的坐标位置来判断,但是比较费力。一个巧妙的技巧是通过包含(在位)这个按钮的其他组件的OnMouseMove事件来判断(注意:选中的外围组件相对于这个按钮要有足够的深度,否则一旦鼠标移动过快,可能会错过OnMouseMove事件,造成失序。肯定的方法是用外围组件的OnMouseMove事件来双重保护它。

以按钮外围部分为MainForm MainForm为例,将其添加到与其OnMouseMove事件对应的函数MainFormMouseMove()中。

如果(!bl start)///鼠标刚好移出按钮。

StartSpeedButton-> Glyph-> Assign(start 1);//图形恢复为黑白

blStart = true//准备鼠标重入按钮

最后,在主窗体的CPP文件前面添加为SndPlaySound提供语句的头文件。

#包括

编译运行,哈哈,一切如预期,我的按钮有HTML风格,还不赶紧行动。

注意:以上程序运行于Builder 4.0/win98。这里说的主窗体也可以是包含动态按钮的窗体。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 用C++制作具有HTML风格的动态按钮

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情