益友软件工作室

加密金刚锁相关技术 → C++Builder类技术文章 → 利用C++Builder5.0开发自己的屏幕保护程序

利用C++Builder5.0开发自己的屏幕保护程序

文章作者:孙航东

在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中运行通过。

特别申明

本栏目的文章都是本人从网上搜集而来,仅供大家学习研究之用,请不要用于商业目的!其中署名“佚名”的,意思是作者不详。如果某些文章未署你的名字,请来信告知,我会补上的。如果你认为某些文章侵犯了你的正当权宜,也请来信,我会将它删除。