china.com
主页
新闻
体育
游戏
文化
教育
健康
财经
科技
旅游
军事
娱乐
商贸
  科技动态 硬件广场 下载基地 网络教室 网络冲浪 科学博览 移动时代 手机上网 桌面壁纸 科技商情  


如何利用C++ Builder 5.0 实现屏幕保护程序的开发

2000-08-16 14:18:45

  在Windows系统中为用户提供了很多屏幕保护程序,如:“三维文字”、“三维变形物”,同时也有一些专门制作屏幕保护程序的应用软件。要是自己能够做一个有自己个性的屏幕保护程序,那该有多好。其实用户完全可以开发一个有自己风格的屏幕保护程序,那该有多好,那么屏幕保护程序是怎样工作的,又是怎样实现的呢?。

  原理:屏幕保护程序的文件名是SCR 文件,其实就是一个标准的.exe文件,他有二部份组成:保护程序执行

界面、保护程序设置界面。同时为了防止屏幕保护程序的重复执行和屏幕刷新带来问题屏幕保护程序要处理Windows的几个消息就可以了。最后为了使保护程序能够按照用户以前设置的参数运行,采用了注册表技术来保存用户的设置信息。

现以制作一个屏幕保护程序为例介绍如下:

  1、在C++ Builder 5.0中建立一个含有两个表单Form1和Form2 的工程文件Project1。其Form1用来设置运行参数,Form2用来执行屏幕保护程序.

在Form1中添加如下控件:

       Name               Caption        

       Label1             运行速度

      Button1             确定

      Button2             取消

      Edit1              

在Form2中添加如下控件

     Name           Property       Value

     Timer1            Interval        10

2 、在Unit1.h中添加如下代码:

#include "registr.hpp"

private:

TRegistry  MyReg;



   TRegistry  MyReg;

3 、在TForm1的OnShow事件中添加如下代码:

void __fastcall TForm1::Form1Show(TObject *Sender)

{

   MyReg=new TRegistry;

   MyReg->RootKey=HKEY_LOCAL_MACHINE;

   MyReg->OpenKey("Software\\MyCompany\\Remember",true);

   Edit1->Text=MyReg->ReadInteger("Interval");//从注册表中读取屏幕保护程序的时间设置信息//

}

  4 、在Form1的Button1的Click事件中添加如下代码:

   void __fastcall TForm1::Button1Click(TObject *Sender)

{

MyReg->WriteInteger("Intervl",Edit1->Text.ToInt( ));

MyReg->Free( );//向注册表中写入屏幕保护程序的时间信息//

Close( );

   }

  5 、在Fom1的Button2的Click事件中添加如下代码:

   void __fastcall TForm1::Button2Click(TObject *Sender)

{

   Close( );

}

  6、在Unit2.h中添加如下代码:

  Public:

  BEGIN_MESSAGE_MAP

  MESSAGE_HANDLER(WM_ERASEBKGND,TWMEraseBkgnd,WMEraseBkgnd)

  MESSAGE_HANDLER(WM_ACTIVATE,TWMActivate,WMActivate)

  MESSAGE_HANDLER(WM_SYSCOMMAND,TWMSysCommand,WMSysCommand)

  END_MESSAGE_MAP(TForm)//定义要处理的Windows消息//

  int x1,x2,x3 ,x4,x5,x6;

  private:

  void __fastcall CreateParams(TCreateParams &Params);

  void __fastcall WMEraseBkgnd(TWMEraseBkgnd &Msg);

  void __fastcall WMActivate(TWMActivate &Msg);

  void __fastcall WMSysCommand(TWMSysCommand &Msg);//用以响应和处理Windows消息。//

  Graphics::TBitmap *ScreenBitmap;//屏幕保护程序的背景颜色//

  7 、在Form2的OnCreate事件中添加如下代码:

  void __fastcall TForm2::Form2Create(TObject *Sender)

{

Left = 0;        

Top = 0;        

Width = Screen->Width;

  Height= Screen->Height;// 使窗口的大小为整个屏幕的大小//

  Cursor = crNone;     file://隐藏屏幕光标//

  ScreenBitmap->Width = Width;      

  ScreenBitmap->Height = Height;    

  SreenBitmap->Canvas->Brush->Color = clBlack;//设置屏幕背景大小和颜色//

   ScreenBitmap->Canvas->FillRect(Rect(0,0,Width,Height));

  Timer1->Enabled = true;

  Form1->MyReg->OpenKey("Software\\MyCompany\\Remember",true);

  Timer1->Interval=Form1->MyReg->ReadInteger("Interval");

  x4=10;

  x5=20;

  x6=30;

}

  8、在Form2的OnClose事件中添加如下代码:

void __fastcall TForm2::Form2Close(TObject *Sender)

{

  Timer1->Enabled = false;

   delete ScreenBitmap;

}

  9 、在Form2的OnKeyDown 、OnMouseDown、OnMouseMoves事件中添加如下代码:

void __fastcall TForm2::Form2KeyDown(TObject *Sender, WORD &Key,

TShiftState Shift)

{

  Close( );

MyReg->Fee( );

}

void __fastcall TForm2::Form2MouseDown(TObject *Sender, TMouseButton Button,

TShiftState Shift, int X, int Y)

{

  Close( );

MyReg->Free( );

}

void __fastcall TForm2::Form2MouseMove(TObject *Sender, TShiftState Shift, int X,

int Y)

{

  Close( );

MyReg->Free ( );

}//如果发生鼠标移动、键盘按键关闭屏幕保护程序//

  10、处理Windows的WM_ERARSEBKGND消息:

void __fastcall TForm2::WMEraseBkgnd(TWMEraseBkgnd &Msg)

{          

  Msg.Result = false; file://不刷新屏幕背景//

}

  11、处理Windows的WM_ACTIVE消息:

void __fastcall TForm2::WMActivate(TWMActivate &Msg)

{

   if(Msg.Active == false)

  Close();     file://当关闭关闭屏幕保护后,程序自动退出//  

}

  12 、处理Windows的WM_SYSCOMMAND消息:

void __fastcall TForm1::WMSysCommand(TWMSysCommand &Msg)

{                

  if(Msg.CmdType == SC_SCREENSAVE)

  Msg.Result = true; file://防止屏幕保护程序被重复执行//    

  else

   TForm::Dispatch(&Msg); file://程序把消息发往其他对象//    

  13、在Timer1的Timer事件中添加如下代码:

void __fastcall TForm1::Timer1Timer(TObject *Sender)

{

  

  x1=Random(Screen.Height);

  x2=Random(Screen.Weight);

  x3=Random(Screen.Height);

  Canvas->pen->Color=RGB(0,0,0);

   Canvas->Pen->Width=10;

  Canvas->Brush->Color=RGB(0,0,0);

  Canvas->Ellipse(x4,x5,abs(x4-x6),abs(x5-x6));

  Canvas->Pen->Color=RGB(Ranndom(255),Random(255),Random(255));

  Canvas->Pen->Width=10;

  Canvas->Brush->Color=RGB(Ranndom(255),Random(255),Random(255));

  Canvas->Ellipse(x1,x2,abs(x1-x3),abs(x2-x3));

  x4=x1;

  x5=x2;

  x6=x3;//屏幕保护效果,用户可以自己定义//

  }

  14、 在Form2的OnPaint事件中添加如下代码:

  void __fastcall TForm1::FormPaint(TObject *Sender)

{

   Canvas->Draw(0,0,ScreenBitmap);//重画背景//

}

  摘自《赛迪网》 孙航东/文

404 Not Found

404 Not Found


nginx


科技检索


中华网推荐

  • 1000名医生在线咨询

  • 中国足球队官方网站

  • 鸦片玫瑰(新版)

  • 精选股票天地

  • 闪光的flash教程

  • 中华网汽车世界

  • 为你的爱情出谋划策

  • 网文精选——野百合集

  • 世界文化遗产在中国

  • 历届香港小姐风姿集



  •  


    网络教室编辑信箱
    版权声明 | 本站检索 | 联系方法 | 刊登广告 | 使用说明 | 关于中华网 | 豁免条款

    版权所有 中华网