我爱黑客网首页 设为首页
加入收藏
联系我们
 首 页  技术文章 下载中心 站长学院 交流论坛
 软件:
 文章:        教程:
 推荐: 我爱黑客网论坛
 
 
 
 
   
黑软: Q Q 软件 木马间谍 探嗅监听 溢出攻击 加密解密 漏洞扫描 脚本注入 远程控制 综合利用 聊天工具  
 
技术文章: 爱黑新闻 | 黑客攻防 | 网络技术 | 程序设计 | 系统操作 | 本站动态 | 业界动态 | 安全公告 | 病毒公告 | 八卦黑客
 
 
您当前的位置:我爱黑客 -> 程序设计 -> C++ -> C++图象 -> 文章内容  
栏目导航
· C++综合 · C++通信
· C++视图 · C++图象
· C++系统 · C++多媒体
· C++界面 · C++文件
· C++数据库 · C++网络
热门文章
· 用C++ Builder对图像进..
· 在CB中进行DirectX编程..
· 在CB中进行DirectX编程..
· 在CB中进行DirectX编程..
· 在CB中进行DirectX编程..
· 使用双缓冲技术绘制曲..
· 用CB实现图像的特技显..
· Win 95/NT下OpenGL编程..
· 实现窗体的渐变背景
· 在C++Builder中实现快..
· 属性表标签上的位图在..
· 在C++ Builder中进行D..
相关文章

· 在C++Builder利用Ne..
· 在C++Builder中编写..
· 在CB5中使用ADO数据..
· 在C++Builder中使用..
· 如何在C++Builder中..
· 在CB6下基于api函数..
· 在CB程序中控制Wind..
· 在C++ Builder中实现..
· Win9x下隐藏程序不出..
· 在C++Builder中自定..
查看更多与在C++Builder中实现快速动画相关内容

在C++Builder中实现快速动画
作者:幽火  来源:www.5ihack.com  发布时间:2007-1-8 17:23:35  发布人:ghostfire

减小字体 增大字体

  快速动画是指每隔一段很小的时间间隔就快速擦去原有画面,并重新画上新的画面的动画技术。快速动画成功的关键就在于擦去和重画的速度必须很快,否则画面就会有闪烁现象。

  在VB中制作快速动画比较简单,只要把窗体的AutoRedraw属性设置为true,再直接调用API函数BitBlt,画完一帧Refresh一次。但C++Builder的窗体没有AutoRedraw属性,只要一使用BitBlt,窗体就会自动刷新,由于一帧画面往往要几次用到BitBlt,画面就闪烁起来了。解决的办法就是自己定义一个不可见的缓冲区,其大小应与目标窗体相同,先在缓冲区上把一帧的画面画完,再用一次BitBlt函数把缓冲区的图案贴到窗体上。请看例子:

  //在TForm1 *Form1;的后面添上这三句

  Graphics::Tbitmap *p;
   Graphics::Tbitmap *q;
   int xx=0;
   //---------------------
   void __fastcall TForm1::FormCreate(Tobject *Sender)
   {
    p=new Graphics::Tbitmap;//这存放的就是要贴到窗体上的小图案
    p->Handle=LoadBitmap(Hinstance,″aaa″);//从资源文件中载入小图案
    q=new Graphics::Tbitmap;//定义缓冲区q
    q->Width=Width;//使缓冲区的大小与窗体相同
    q->Height=Height;
    PatBlt(q->Canvas->Handle,0,0,q->Width,q->Height,0);//把缓冲区的背景变为黑色
   }
   //--------------------
   void __fastcall TForm1::FormDestroy(Tobject *Sender)
   {
    //程序结束时释放内存
    delete p;
    delete q;
   }
   //--------------------
   void __fastcall TForm1::Timer1Timer(Tobject *Sender)
   {
    //窗体上要加上一个Timer控件
    xx+=2;
    PatBlt(q->Canvas->Handle,0,0,Width,Height,0);//把缓冲区的背景变为黑色,同时擦去了旧的画面
    BitBlt(q->Canvas->Handle,xx,0,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
     //正在缓冲区上制作一帧的画面,这几句是不可见的
    BitBlt(q->Canvas->Handle,xx,50,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(q->Canvas->Handle,xx,100,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(q->Canvas->Handle,xx,150,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(q->Canvas->Handle,xx,200,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(q->Canvas->Handle,xx,250,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(q->Canvas->Handle,xx,300,p->Width,p->Height,p->Canvas->Handle,0,0,SRCCOPY);
    BitBlt(Canvas->Handle,0,0,Width,Height,q->Canvas->Handle,0,0,SRCCOPY);
     //把缓冲区的画面贴到窗体上
   }

查看更多与在C++Builder中实现快速动画相关内容

[ ] [返回上一页] [打 印] [收 藏]
上一篇文章:
下一篇文章:
      属性表标签上的位图在MFC,CB下的实现       实现窗体的渐变背景
∷相关文章评论∷   (评论内容只代表网友观点,与本站立场无关!) [发表评论]
 
 
 
 
晋ICP备05008232   维护网络安全、传播安全技术才是我们的目标! 
 
关于本站 - 网站帮助 - - 下载声明 - 友情连接 -网站地图