动态网站制作指南 [  QQ表情  ]
[ 投票调查 ]
[ 企业邮箱 ]
[ 网站空间 ]
网络编程 | 站长之家 | 网页制作 | 图形图象 | 操作系统 | 冲浪宝典 | 软件教学 | 网络办公 | 邮件系统 | 网络安全 | 认证考试 | 系统进程
ASP源码 | .Net源码 | PHP源码 | JSP源码 | JAVA源码 | CGI源码 | VB源码 | C++源码 | Delphi源码 | PB源码 | VF源码 | 汇编 | 服务器
Firefox | IE | Maxthon | 迅雷 | 电驴 | BitComet | FlashGet | QQ | QQ空间 | Vista | 输入法 | Ghost | Word | Excel | wps | Powerpoint
asp | .net | php | jsp | Sql | c# | Ajax | xml | Dreamweaver | FrontPages | Javascript | css | photoshop | fireworks | Flash | Cad | Discuz!
当前位置 > 网站建设学院 > 网络编程 > C/C++教程
Tag:注入,存储过程,分页,安全,优化,xmlhttp,fso,jmail,application,session,防盗链,stream,无组件,组件,md5,乱码,缓存,加密,验证码,算法,cookies,ubb,正则表达式,水印,索引,日志,压缩,base64,url重写,上传,控件,Web.config,JDBC,函数,内存,PDF,迁移,结构,破解,编译,配置,进程,分词,IIS,Apache,Tomcat,phpmyadmin,Gzip,触发器,socket
网络编程:ASP教程,ASP.NET教程,PHP教程,JSP教程,C#教程,数据库,XML教程,Ajax,Java,Perl,Shell,VB教程,Delphi,C/C++教程,软件工程,J2EE/J2ME,移动开发
文章搜索服务
邮件订阅
输入你的邮件地址,
你将不会错过任何关于:
[ C/C++教程 ]的信息

本月文章推荐
.ARP & ICMP.
.DOS下的3D按钮.
.改变RichEdit的游标位置.
.实现真正意义上的二维动态数组模.
.1996年9月全国计算机等级考试二级.
.一个简单的编辑器雏形.
.东软SMIAS短信接入Java开发.
.新手入门:c++经典.
.文本模式下的GUI设计,使用tc2.0.
.监视剪贴板内容.
.开发精彩实例:窗体自动隐藏.
.C++箴言:用非成员非友元函数取代.
.通过覆盖__atexit进行缓冲区溢出.
.经典c程序100例==31--40.
.BCB6命令行工具简介.
.通过键盘操作的,想进行c图形化编.
.对《QQ列表精灵》源代码分析和仿.
.使用 C++ Builder&nbs.
.C语言入门之循环结构.
.gcc支持在#pragma语句中使用宏替.

用C++ 开发特殊的屏幕显示效果

发表日期:2008-3-8 |



  以前,程序员在DOS平台下开发应用软件时,都会利用DOS的开放性特点,通过中断编写出一些非凡的显示效果,以此来给自己的程序增加一些有趣的特色。
然而,随着面向Windows的编程和可视化的第四代开发工具的逐步使用,人们越来越被Windows的统一的编程风格所束缚,同时由于Windows直接治理中断,想用原来的方法来实现一些非凡的显示效果变得越来越困难了。

  那么,在Windows时代程序员如何来实现窗口的非凡效果呢?实际上,由于整个Windows是图形显示系统,因此对系统而言,用户程序的每一个界面、窗口都是系统的一个画布。程序员可以利用这一特点来实现窗口的非凡效果。

  最近笔者利用C++ Builder 5.0 Enterprise成功的实现了该项功能,现介绍如下:

  1、在BCB中建立一个工程文件project1.dpr,在Form1中添加如下控件:

   控件名称           属性         值

   TForm             Color       clBTnText

   TMainMenu           Name        MainMneu1

   TImage             Name         Image1

                  Align       alClient

                  AutoSize       True

  同时在 MainMenu1控件中增加一个菜单项,其属性为:

   Name             Caption

   Items1           图像从中间往左右分出

   Items2           图像从左右往中间合进

   Items3           图像从中间往上下分出

   Items4           图像从上下往中间合进

   Items5           图像从左移入

   Items6           图像从右移入

   Items7           图像从上移入

   Items8           图像从下移入

   Items9           图像从左刷屏显示

   Items10          图像从右刷屏显示

   Items11          图像从上刷屏显示

   Items12          图像从下刷屏显示

   Items13          图像从上往下流水

   Items14          图像从下往上流水

   Items15          图像圆形展出

   Items16          图像左右错移

   Items17          图像上下错移

  同时在Unit.cpp中的private中添加如下变量:

  private:

   BITMAP bm;

   Graphics::TBitmap *Bitmap1;

   int i,j;

   int WideHalf;

   TRect Dest1,Source1,Dest2,Source2;

  int HeightHalf;

  HRGN MyRgn;

  2、在Form1的OnCreate事件中添加如下代码:

  void __fastcall TForm1::FormCreate(TObject *Sender)//进行图像特效显示的初始化操作//

  {      

    Graphics::TBitmap *Bitmap1 = new Graphics::TBitmap();//定义一个图象句柄//

     Bitmap1->LoadFromFile("C:\\factory.bmp");//设定所要特效显示的图象为factory.bmp//


     if(GetDeviceCaps(Form1->Canvas->Handle,BITSPIXEL)==8)//取得显示窗口的颜色属性//

     {

      GetObject(Bitmap1->Handle,sizeof(BITMAP),(LPSTR)&bm);

      if (bm.bmBitsPixel==8)//假如特效显示的图象颜色属性为256色//

      {

       SelectPalette(Form1->Canvas->Handle,Bitmap1->Palette,FALSE);//从特效显示的颜色画板中提取配色方案//

       RealizePalette(Form1->Canvas->Handle); //在显示窗口中设置配色方案//

      }

      Bitmap->HandleType=bmDDB;

       }

     }    

  3、在Items1的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item1Click(TObject *Sender)

  {      //图象从中间往左右分出//

  Form1->Refresh( );

  WideHalf=Bitmap1->Width/2+Bitmap1->Width%2;

  for(i=0;i<=WideHalf; i++)

   {

   Dest1=Rect(WideHalf-i,0,WideHalf+i,Bitmap1->Height);

   Source1=Rect(WideHalf-i,0,WideHalf+i,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);//图像的延迟显示//

  }

   }

  4、在Items2的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item2Click(TObject *Sender)

  {                   //图像从左右往中间合进//

  Form1->Refresh( );

   WideHalf=Bitmap1->Width/2+Bitmap1->Width%2;

   Form1->Refresh( );

   for(i=0;i<=WideHalf;i++)

   {

   Source1=Dest1=Rect(0,0,i,Bitmap1->Height);

   Source2=Dest2=Rect(Bitmap1->Width-i,0,Bitmap->Width,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bimap1->Canvas,Source1);

   Form1->Canvas->CopyRect(Dest2,Bitmap1->Canvas,Source2);

   for(j=0;j<10000;j++);

   }

  }

  5、在Items3的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item3Click(TObject *Sender)

  {           //图像从中间往上下分出//

  Form1->Refresh( );

   HeightHAlf=Bittmap1->Height/2+Bitmap1->Height%2;

   for(i=0;i<=HeightHalf;i++)

   {

   Dest1=Rect(0,HeightHalf-i,Bitmap1->Width,HeightHalf);

   Source1=Rect(0,0,BmpHandle->Width,i);

   Dest2=Rect(0,HeightHaf,Bitmap1->Width,HeightHalf+i);

   Source2=Rect(0,Bitmap1->Height-i,Bitmap1->Width,Bitmap1->height);

   Form1->Canvas->CopyRect(Dest1,BmpHandle->Canvas,Source1);

   Form1->Canvas->CopyRect(Dest2,BmpHandle->Canvas,Source2);

   for(j=0;j<10000;j++);

   }

  }

  6、在Items4的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item4Click(TObject *Sender)

  {                 //图像从上下往中间合进//

  Form1->Refresh( );

   HeightHalf=Bitmap1->Height/2+Bitmap1->Height%2;

   for(i=0;i<=HeightHalf;i++)


   {

   Dest1=Rect(0,0,Bitmap1->Width,i);

   Source1=Rect(0,HeightHalf-i,Bitmap1->Width,HeightHalf);

   Dest2=Rect(0,Bitmap1->Height-i,

         Bitmap1->Width,Bitmap1->Height);

   Source2=Rect(0,HeightHalf,Bitmap1->Width,HeightHalf+i);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   Form1->Canvas->CopyRect(Dest2,Bitmap1->Canvas,Source2);

   for(j=0;j<10000;j++);

   }

  } (未完) 更多文章 更多内容请看C/C++技术专题  C/C++相关文章  Wlan组网----家庭专题专题,或
  7、在Items5的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item5Click(TObject *Sender)

  {                        //图像从左移入//

   Form1->Refresh( );

  for(i=Bitmap1->Width;i>=0;i--)

   {

   Dest1=Rect(0,0,Bitmap1->Width-i,Bitmap1->Height);

   Source1=Rect(i,0,Bitmap1->Width,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

  }

  8、在Items6的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item6Click(TObject *Sender)

  {                        //图像从右移入//

   Form1->Refresh( );

  for(i=0;i<=Bitmap1->Width;i++)

   {

   Dest1=Rect(Bitmap1->Width-i,0,Bitmap1->Width,

         Bitmap1->Height);

   Source1=Rect(0,0,i,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

  }

  9、在Items7的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item7Click(TObject *Sender)

  {                       //图像从上移入//

  Form1->Refresh( );

  for(i=0;i<=Bitmap1->Height;i++)

   {

   Dest1 =Rect(0,0,Bitmap1->Width,i);

   Source1 =Rect(0,Bitmap1->Height-i,Bitmap1->Width,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

  }

  10、在Items8的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item8Click(TObject *Sender)

  {                       //图像从下移入//

  Form1->Refresh( );

   for(i=0;i<=Bitmap1->Height;i++)


   {

   Dest1 =Rect(0,Bitmap1->Height-i,Bitmap1->Width,

         Bitmap1->Height);

   Source1 =Rect(0,0,Bitmap1->Width,i);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

    }

  11、在Items9的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item9Click(TObject *Sender)

  {                       //图像从左刷屏显示//

  Form1->Refresh( );

  for(i=0;i<=Bitmap1->Width;i++)

   {

   Dest1 =Rect(0,0,i,Bitmap1->Height);

   Source1 =Rect(0,0,i,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

  }

   }

  12、在Items10的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item10Click(TObject *Sender)

  {                     //图像从右刷屏显示//

  Form1->Refresh( );

  for(i=Bitmap1->Width;i>=0;i--)

   {

   Dest1 =Rect(i+0,0,0+Bitmap1->Width,0+Bitmap1->Height);

   Source1 =Rect(i,0,Bitmap1->Width,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

  }

  13、在Items11的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item11Click(TObject *Sender)

  {                     //图像从上刷屏显示//

  Form1->Refresh( );

   for(i=0;i<=Bitmap1->Height;i++)

   {

   Dest1 =Rect(0,0,Bitmap1->Width+0,i+0);

   Source1 =Rect(0,0,Bitmap1->Width,i);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

  }

  }

  14、在Items12的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item12Click(TObject *Sender)

  {                   //图像从下刷屏显示//

  Form1->Refresh( );

   for(i=Bitmap1->Height;i>=0;i--)

   {

   Dest1 =Rect(0,i+0,Bitmap1->Width+0,Bitmap1->Height+0);

   Source1 =Rect(0,i,Bitmap1->Width,Bitmap1->Height);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

  }

  15、在Items13的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item13Click(TObject *Sender)

  {                   //图像从上往下流水//

  Form1->Refresh( );

  for(i=Bitmap1->Height;i>=0;i--)

   {

   Source1 =Rect(0,i,Bitmap1->Width,i+1);

   for(int j1=0;j1<=i;j1++)

   {

   Dest1 =Rect(0 ,j1,Bitmap1->Width+0,j+1);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);


   for(j=0;j<10000;j++);

   }

   }

  }

  16、在Items14的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item14Click(TObject *Sender)

  {                    //图像从下往上流水//

  Form1->Refresh( );

   for(i=0;i<=Bitmap1->Height;i++)

   {

   Source1 =Rect(0,i,Bitmap1->Width,i+1);

   for(int j1=Bitmap1->Height-1;j1>=i;j1--)

   {

   Dest1 =Rect(0,j1,Bitmap1->Width,j1+1);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   for(j=0;j<10000;j++);

   }

   }

  }

  17、在Items15的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item15Click(TObject *Sender)

  {                   //图像圆形展出//

  Form1->Refresh( );

   int j1=sqrt(Bitmap1->Width*Bitmap1->Width+

       Bitmap1->Height*Bitmap1->Height)/2+4;

   for (i=1;i
   {

   MyRgn=CreateEllipticRgn(Bitmap1->Width/2-i,

               Bitmap1->Height/2-i,

               Bitmap1->Width/2+i,

               Bitmap1->Height/2+i);

   SelectObject(Canvas->Handle,MyRgn);

   Canvas->Draw(0,0,Bitmap1);

   DeleteObject(MyRgn);

   for(j=0;j<10000;j++);

   }

  }

  18、在Items16的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item16Click(TObject *Sender)

  {                   //图像左右错移//

  Form1->Refresh( );

   HeightHalf=Bitmap1->Height/2+Bitmap1->Height%2;

   Source1=Rect(0,0,Bitmap1->Width,HeightHalf);

   Source2=Rect(0,HeightHalf,Bitmap1->Width,Bitmap1->Height);

   for(i=0;i<=Bitmap1->Width;i++)

   {

   Dest1=Rect(0-Bitmap1->Width+i,0,i,0+HeightHalf);

   Dest2=Rect(Bitmap1->Width-i,HeightHalf,

         Bitmap1->Width+Bitmap1->Width-i,

         Bitmap1->Height+0);

   Form1->Canvas->MoveTo(0-Bitmap1->Width+i-1,0);

   Form1->Canvas->LineTo(0-Bitmap1->Width+i-1,HeightHalf);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   Form1->Canvas->MoveTo(

           Bitmap1->Width+Bitmap1->Width-i,0);

   Form1->Canvas->LineTo(

    Bitmap1->Width+Bitmap1->Width-i,Bitmap1->Height);

  

   Form1->Canvas->CopyRect(Dest2,Bitmap1->Canvas,Source2);

   for(j=0;j<10000;j++);

   }

  }

  19、在Items17的OnClieck事件中添加如下代码:

  void__fastcall TForm1::Item17Click(TObject *Sender)

  {                    //图像上下错移//

   Form1->Refresh( );

  WideHalf=Bitmap1->Width/2+Bitmap1->Width%2;


   Source1=Rect(0,0,WideHalf,Bitmap1->Height);

   Source2=Rect(WideHalf,0,Bitmap1->Width,Bitmap1->Height);

   for(i=0;i<=Bitmap1->Height;i++)

   {

   Dest1=Rect(0,0-Bitmap1->Height+i,WideHalf,0+i);

   Dest2=Rect(WideHalf,

         Bitmap1->Height-i,

         Bitmap1->Width,

         Bitmap1->Height+Bitiap1(>Ighdht)k-;   &'Biym1->Canvas->MoveTo(0,0-Bitmap1->Height+i-1);

   Form1->Canvas->LineTo(WideHalf,

                   0-Bitmap1->Height+i-1);

   Form1->Canvas->CopyRect(Dest1,Bitmap1->Canvas,Source1);

   Form1->Canvas->MoveTo(WideHalf,

                   Bitmap1->Height+Bitmap1->Height-i);

   Form1->Canvas->LineTo(Bitmap1->Width,

                   Bitmap1->Height+Bitmap1->Height-i);

   Form1->Canvas->CopyRect(Dest2,Bitmap1->Canvas,Source2);

   for(j=0;j<10000;j++);

  }

  }

以上程序在C++ Builder5.0Enterpriseh和Win98/WinME通过。 更多文章 更多内容请看C/C++技术专题  C/C++相关文章  Wlan组网----家庭专题专题,或
上一篇:详述C++语言的VxD与外界通讯的所有接口 人气:292
下一篇:在Visual C++应用程序中彻底清除进程 人气:578
浏览全部C/C++的内容 Dreamweaver插件下载 常用网页广告代码全集
  最新网站源码 最新软件下载
2008-10-12 team论坛 v2.0.4 bulid 080916 A
2008-10-12 Roclog v3.1.6
2008-10-12 SupeV v1.0.1 简体中文 GBK
2008-10-12 NetCMS v1.6.0.1010 正式版
2008-10-12 PHP考试系统PPFrame v1.2.7
2008-10-12 LPAS个人相册 v1.6.3
2008-10-12 快问仿百度知道系统 动态-静态-互
2008-10-12 方卡广告防点击系统 V1.0 GB2312
2008-10-12 泡菜内容管理系统[PCMS] v1.0 Bu
2008-10-11 联系人分组工具 v1.1 中文破解版
2008-10-11 FaceMelter变脸 v2.0 汉化破解版
2008-10-11 PathTracker道路跟踪仪 v1.2 破解
2008-10-11 Rooms手机聊天室 v0.6.7 破解版
2008-10-11 RemoteDesktop远程桌面 v1.0 破解
2008-10-11 ProRemote远程调音台 v1.0.1 破解
2008-10-11 PicShare照片共享 v1.0.0 破解版
2008-10-11 Photogene照片编辑器 v1.5 汉化破
2008-10-11 WriteRoom共享文档 v1.0 破解版
  发表评论
姓 名: 验证码:
内 容:
站长工具:网站收录查询 | Google PR查询 | ALEXA排名查询 | CSS在线编辑器 | 广告代码 | js/vbs加密 | md5加密 | 进制转换 | UTF-8 转换工具 | Html转换js | Html转换asp | Html转换php | Html转换perl
实用工具:汉字翻译拼音 | 拼音字典 | 符号对照表 | 个税计算 | 实时汇率查询换算 | 经典小工具 | 汉字简繁转换 | 普通单位换算 | 公制单位换算 | 生辰老黄历 | 国内电话区号 | 国家代码与域名缩写 | 文字加密解密 | 健康查询 | 万年历 | 汉字横竖排版 | 手机号码查询 | 计算器 | ip搜索
业务联系 | 广告刊登 | 频道合作 | 投稿荐稿 | 联系方式 | 加入收藏 | RSS订阅
Copyright © 2000-2008 www.knowsky.com All rights reserved | 网络实名:动态网站制作指南 | 沪ICP备05001343号
ホームページ制作 不動産検索システム 求人情報
防水工事·改修工事 フットサル大会 探偵
SEO対策 中国語教室 ホームページ作成