手机站
网通分站
电信主站
密 码:
用户名:
当前位置 : 主页>程序设计>C/C++>列表

用CB制作具备HTML风格的动态按钮

来源:互联网 作者:west263.com 时间:2008-02-23
西部数码-全国虚拟主机10强!40余项虚拟主机管理功能,全国领先!双线多线虚拟主机南北访问畅通无阻!免费赠送企业邮局,.CN域名,自助建站480元起,免费试用7天,满意再付款! P4主机租用799元/月.月付免压金!
  在浏览网页时,各种各样制作精美的动态按钮常常令人惊羡不已。这种按钮平常默默无闻,当鼠标经过时,立即一跃而出,在鼠标变为手形的同时,图像也变得更加亮丽,有的还发出特有声音,将您的注意力瞬间抓了过去;而当鼠标移开之后,一切又恢复原样,以免分散您对新焦点的注意。假如我们能用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环境下运行通过。这里所说的主表单也能够是包含动态按钮的表单。




文章整理:西部数码--专业提供域名注册虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

热点关注
IDC资讯 虚拟主机 域名注册 托管租用 vps主机 智能建站
网站运营 建站经验 策划盈利 搜索优化 网站推广 免费资源
网站联盟 联盟新闻 联盟介绍 联盟点评 网赚技巧
行业资讯 业界动态 搜索引擎 网络游戏 门户动态 电子商务 广告传媒
网络编程 Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术 Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷 Internet Explorer
网页制作 FrontPages Dreamweaver Javascript css photoshop fireworks Flash
程序设计 Java技术 C/C++ VB delphi
网络知识 网络协议 网络安全 网络管理 组网方案 Cisco技术
操作系统 Win2000 WinXP Win2003 Mac OS Linux FreeBSD
返回首页 |关于我们 | 联系我们 | 付款方式 | 创业联盟 | 价格总览 | 资讯中心 | 友情链接 | 网站地图 | 招贤纳士 | RSS