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

原创 2001年05月13日 22:16:00

       在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();     //当关闭关闭屏幕保护后,程序自动退出//  

      }

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

      }

 

Screen Killer —— 我的C++“屏幕保护程序”

0.简介       早前学C++的Win32编程,了解了一点创建窗口的知识,就想写个屏幕保护程序什么的。。。 1.成品        结果是写成了这个Screen Killer:大概就...
  • tobeC3sdn
  • tobeC3sdn
  • 2011年12月12日 18:15
  • 842

控制屏幕保护程序API函数的C++类封装

控制屏幕保护程序API函数的C++类封装by 郭世龙简 介      前几天在codeproject上看到了一篇关于用C#封装控制的屏幕保护程序的文章,觉的很有用于是决定将其改装成C++类封装以供C+...
  • xylary
  • xylary
  • 2007年08月11日 00:00
  • 3635

Borland C++Builder 5.0教程(5)

设计菜单之二――功能按钮菜单  Windows下的程序的菜单大致可以分成两大类:第一类是下拉式的菜单,如主菜单(MainMenu)和右键菜单(PopMenu);第二类是功能按钮菜单,如工具菜单(Too...
  • douniwan712
  • douniwan712
  • 2009年12月28日 19:39
  • 348

用VB制作屏幕保护程序

用VB制作屏幕保护程序利用Visual Basic 制作屏幕保护程序非常容易。本文将详细给大家介绍制作屏幕保护程序的方法。 ---- 一. 基本编程思路 ---- 大家都知道屏幕保护程序就是利用变换的...
  • firetoucher
  • firetoucher
  • 2001年09月10日 18:53
  • 1337

U盘中病毒后文件变为屏幕保护程序恢复方法

可能是中病毒了插上你的U盘,不要打开,也不要点击任何“文件夹”。看一下U盘的盘符,假设为“X:”,记住。 点击“开始”——“运行”——输入“cmd”——运行,出来一个黑色窗口(命令提示符) 接着输入“...
  • kevin_cyj
  • kevin_cyj
  • 2016年05月10日 19:38
  • 7480

使用 C++ Builder 创建应用程序

3.1 创建应用程序 C++Builder的主要用途于设计创建Windows应用程序。有三种基本的Windows应用程序: · WindowsGUI应用程序。 · 控制面板应用程序。 · 服务应用程序...
  • u010984552
  • u010984552
  • 2016年08月19日 20:18
  • 2123

如何让生成的程序以管理员身份运行(C++builder 2010)

(转载自http://feng06.blog.163.com/blog/static/13501502014102385528860/) 在vista以后的windows版本中,有些时候需要提升编译...
  • Anton8801
  • Anton8801
  • 2016年04月21日 14:44
  • 923

屏幕保护等待时间灰色

由于未知原因,我的机器不能自动锁屏了。原本,自动锁屏是通过屏幕保护程序配合激活时需要密码来进行的,但是现在屏幕保护的时间没的选了,灰色,固定为 60 分钟。 看到这里: http://ibm.c...
  • rongwenbin
  • rongwenbin
  • 2015年01月13日 15:02
  • 2010

在C++ Builder3下实现程序自动运行的方法

---- 现在很多应用软件安装后都可以实现开机自动运行,大大方便了用户使用。想当初我就对这项功能羡慕至极。能否在我们自己编写的程序中实现程序自动运行呢?答案当然是肯定的。利用Borland公司出品的C...
  • nm
  • nm
  • 2000年08月10日 08:32
  • 1643

使C++ Builder编译程度独立运行

C++ Builder版本:xe2 C++ Builder版本默认建立的工程是使用动态库方式,编译出来的程序拿到其它电脑上运行时候,需要相应的动态库,通过设置,我们可以编译出来已经包含动态库的程序。打...
  • sunylat
  • sunylat
  • 2013年02月07日 10:45
  • 1637
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何利用C++ Builder 5.0 实现屏幕保护程序的开发
举报原因:
原因补充:

(最多只允许输入30个字)