分享
 
 
 

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

王朝c/c++·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

在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

Timer1Interval10

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

#include "registr.hpp"

private:

TRegistryMyReg;

TRegistryMyReg;

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

}

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有