• 软件测试技术
  • 软件测试博客
  • 软件测试视频
  • 开源软件测试技术
  • 软件测试论坛
  • 软件测试沙龙
  • 软件测试资料下载
  • 软件测试杂志
  • 软件测试人才招聘
    暂时没有公告

字号: | 推荐给好友 上一篇 | 下一篇

利用C++ Builder 5.0 开发自己的屏幕保护程序

发布: 2007-7-04 20:47 | 作者: admin | 来源:  网友评论 | 查看: 21次 | 进入软件测试论坛讨论

领测软件测试网 孙航东

   在Windows系统中为用户提供了很多屏幕保护程序,如:“三维文字”、“三维变形物”等,其实用户完全可以开发一个有自己风格的屏幕保护程序。

  屏幕保护程序是SCR文件,其实质就是一个标准的可执行文件。SCR文件由两部份组成:保护程序执行界面、保护程序设置界面。最后为了使保护程序能够按照用户以前设置的参数运行,笔者采用了注册表技术来保存用户的设置信息。现以制作一个屏幕保护程序为例介绍如下:

  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;

  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.在Form1的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;

  //隐藏屏幕光标//

  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;

  //不刷新屏幕背景//

  }

  11.处理Windows的WM_ACTIVE消息:

  void __fastcall TForm2::WMActivate(TWMActivate &&Msg)

  {

  if(Msg.Active == false)

  Close();

  //当关闭屏幕保护后,程序自动退出//

  }

  12.处理Windows的WM_SYSCOMMAND消息:

  void __fastcall TForm1::WMSysCommand(TWMSysCommand &&Msg)

  {

  if(Msg.CmdType == SC_SCREENSAVE)

  Msg.Result = true;

  //防止屏幕保护程序被重复执行//

  else

  TForm::Dispatch(&&Msg);

  //程序把消息发往其他对象//

  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);//重画背景//

  }

  15.在Winmain函数中修改如下代码,注意新添加的代码:

    {

   try{

   Application-〉Initialize( );

   if(paramstr(1)=="/s")

   Application-〉CreateForm(Classid(TForm1),&&Form1);

  //显示屏幕保护程序设置界面//

   else

   Application-〉CreateForm(Classid(TForm2),&&Form2);

  //显示屏幕保护程序执行界面//

   Applcation-〉Run();

   }

   }

  以上代码在Windows 98、C++ Builder 5.0中运行通过。   

延伸阅读

文章来源于领测软件测试网 https://www.ltesting.net/


关于领测软件测试网 | 领测软件测试网合作伙伴 | 广告服务 | 投稿指南 | 联系我们 | 网站地图 | 友情链接
版权所有(C) 2003-2010 TestAge(领测软件测试网)|领测国际科技(北京)有限公司|软件测试工程师培训网 All Rights Reserved
北京市海淀区中关村南大街9号北京理工科技大厦1402室 京ICP备2023014753号-2
技术支持和业务联系:info@testage.com.cn 电话:010-51297073

软件测试 | 领测国际ISTQBISTQB官网TMMiTMMi认证国际软件测试工程师认证领测软件测试网