【VB开源代码栏目提醒】:网学会员为需要VB开源代码的朋友们搜集整理了应用VB设计屏幕保护程序 - 大众科技相关资料,希望对各位网友有所帮助!
文章编号1673-2103200702-0032-05应用VB设计屏幕保护程序刘春英菏泽学院计算机与信息工程系山东菏泽274015摘要屏幕保护程序是用来防止长时间不改变像素灼伤屏幕的.介绍了屏幕保护程序的特点以及设计屏幕保护程序的方法并给出了用VB6.0设计的屏幕保护程序代码.关键词屏幕保护程序API函数VisuaBasic6.0中图分类号TP311文献标识码B屏幕保护程序是在设定时间内不使用计算机就会被启动的程序.它的主要作用1是用来保护显示器的屏幕以免被长时间的静止图像灼伤此外它的富有创意的迷人的动画效果使人在上机的间隙也能感受到电脑带来的诸多乐趣1.本文将介绍屏幕保护程序的基本特点及以VB6.0为开发工具设计屏幕保护程序的方法.屏幕保护程序的基本特点及实现方法.屏幕保护程序的基本特点屏幕保护程序可以保护显示屏不被损坏同时节约能源作为屏幕保护程序应该具有如下基本特点251能够自动启动执行.2应用程序的窗体没有边框且为最大化窗体应先于该窗体上的控件接受键盘事件.3屏幕保护程序运行时鼠标的光标被隐藏单击、移动鼠标及按下任意键时程序结束光标重新显示.4有一些动画效果.另外有些屏幕保护程序中还有一些音效控制这时要使用多媒体控件MMContro..屏幕保护程序的实现方法为了实现屏幕保护程序应具备上述特点.在编写VB应用程序时可以采用如下方法41我们在VB中设计的程序在调试完成后在文件菜单中选择“生成exe”时将文件的扩展名指定为scr即可生成一个屏幕保护程序文件.在磁盘上找到并用鼠标右击这个文件在弹出的菜单中选择“安装”将出现我们熟悉的屏幕保护程序设置页选择这个文件并按“确定”即可在系统启动屏幕保护程序时自动执行这个程序文件.2对于第二个特性在VB中可利用窗体的属性设置很容易地实现.窗体的Bordertye属性是用来设置窗体的边框样式的将它设为0即表示窗体没有边框.窗体的Windowstate属性是用来设置窗体运行时的可见状态的将它设为2即表示运行时将窗体最大化.将窗体的KeyPreview设置为True即可实现窗体优先于该窗体上的控件接受键盘事件.3在VB中可对窗体的MouseMove事件、Cick事件和KeyDown事件进行简单编程即可实现单击、移动鼠标及按下任意键时程序结束.窗体的MouseMove事件是在窗体上移动鼠标时被触发窗体的Cick事件是在窗体上单击鼠标时被触发.窗体的KeyDown事件是在窗体上有按键时被触发.在这三个事件中分别加上一条END命令由于屏幕保护程序的窗体是最大化的且没有边框所以用户只要移动鼠标或按下按键时就能结束程序.4对于动画效果本文利用Windows的API函数Bitbt编制一个使用多种方式以动画效果显示图片的过程DispayPicture再用这个过程调用已准备好的不同图片然后以一定的顺序播放这些图片从而达到保护屏幕的效果.屏幕保护程序的设计.准备工作23第29卷第2期Vo.29No.2菏泽学院学报JournaofHezeUniversity2007年4月Apr.2007收稿日期2006-02-02作者简介刘春英1980-女山东成武县人助教在读硕士研究生研究方向软件工程.找一些自己喜欢的个人、家庭或风景照片l0张用扫描仪扫入计算机注意在扫描过程中照片最好存为JPG格式静止图像格式因为这种格式的图像压缩比例大占用空间不到BMP位图格式的5且图像失真小分别命名为picl.jpg—picl0.jpg.同时可使用Photoshop或Microsoft的照片编辑器等软件对扫描进来的照片稍做处理形成用做屏幕保护程序的素材图片.将处理好的素材图片拷贝到一个文件夹ctemp中.虽然使用的图片数没有限制但为了使响应速度更快图片数量不宜太多.然后将一首自己喜爱的音乐转录成“wav”格式以“muic.wav”命名保存在目录temp中.最后设置定时器的Interva属性使得一个循环显示图片的时间与播放一次音乐“muic.wav”的时间基本相同..窗体的设计及属性的设置在ViuaBaic集成环境中新建一个工程文件Project窗体FrmMain是屏幕保护程序的主界面.在窗体FrmMain上放置两个图形框控件PictureBox源图片框picsource与目标图片框picDet、一个定时器控件Timerl及一个MMContro控件6MMCPm.注意MMContro控件不属于标准控件使用前需要通过“工程”菜单的“部件”命令将MicrooftMutime-diaContro6.0Mci32.ocx加载到工具箱内.根据设计的思路它们的属性设置如表l所示.表l各控件的属性设置表对象属性设置值FormNameFrmMainCaption空BackCoor0—BackBorderstye0—NoneWindowstate2—MaximizedControBoxFaeMinButtonFaeMaxButtonFaeKeyPreviewTruePictureBoxNamePicdetBackCoor0—BackBorderstye0—NonePictureBoxNamePicsoureViibeFaeAutoRedrawTrueAutosizeTrueBorderstye0—NoneTimerNameTimerlInterva2000MMControNameMMCpmViibeFae.程序的设计..变量及函数的声明需要定义的窗体级变量和常量如下定义图片编号、显示方式编号变量DimpiAIntegerwiAInteger定义图片名称数组DimPicNamelTol0AstringWindow的API常量声明ContsRCCOPYCC0020为了隐藏和显示鼠标的光标本程序调用了WindowAPI函数showCuror其作用是控制鼠标指针的可视性.它的函数声明如下PrivateDecareFunctionshowCurorLibUer32.dByVabhowALongALong参数bshow确定内部的显示计数器是增加还是减少如果bshow为TRUE则显示计数器增加l如果bshow为FALsE则计数器减l.返回值规定新的显示计数器.该函数设置了一个内部显示计数器以确定光标是否显示仅当显示计数器的值大于或等于0时光标才显示.如果安装了鼠标则显示计数的初始值为0.因此只需简单地调用showCuror函数即能实现鼠标的隐藏与显示.为了动态地显示图片本程序利用Window的API函数Bitbt编制一个以动画效果显示图片的过程DipayPicture.图片显示方式有立即显示、从左右向右左移动、从上下向下上移动、从中间左右两边向左右两边中间移动、从中间上下两边向上下两边中间移动、行列栅格等ll种.上述显示方式的编号设置依次为0—0.Window的API函数Bitbt的声明如下PrivateDecareFunctionBitBtLibgdi32ByVahDetDCALongByVaXALongByVaYALongByVanWidthALongByVaneightALongByVahsrcDCALongByVaXsrcALongByVaYsrcALongByVadwRopALongALong该函数的作用是将一幅位图从一个设备场景复制到另一个.源和目标DC相互间必须兼容.其返回值为Long类型非零表示成功零表示失败.会设置GetLatError.参数hDetDC表示目标设备场景数据类型为Longxy表示对目标hDetDC中目标矩形左上角位置进行描述的那个点.用目标DC的逻辑坐标表示nWidthneight表示欲传输图象的宽度和高度hsr-332007年刘春英应用VB设计屏幕保护程序第2期cDCLong表示源设备场景.如光栅运算未指定源则应设为0XSrcYSrc表示对源hSrcDC中源矩形左上角位置进行描述的那个点用源DC的逻辑坐标表示dwRop表示传输过程要执行的光栅运算...用户自定义过程的编写在该应用程序中用作屏幕保护的是一些图片因此需要编写加载图片程序PicLoad为了动态地显示图片需编制一个以动画效果显示图片的过程DispayPicture为了在显示图片的过程中播放音乐还需要编写播放背景音乐函数MusicPay.其代码l2分别如下以多种方式显示图片的过程PrivateSubDispayPicturesrcAsControdstAsControstyeAsIntegerDimrAsSingewAsSingehAsSingeDimiAsSingeAsSingekAsSingewdst.Widthhdst.HeightSeectCasestyeCase0立即显示dst.Picturesrc.PictureCasel从上向下移动Fori0TohStep0.lrBitBtdst.hDC0iwlsrc.hDC0iSRCCOPYNextiCase2从下向上移动ForihTo0Step0.lrBitBtdst.hDC0iwlsrc.hDC0iSRCCOPYNextiCase3从左向右移动Fori0TowStep0.lrBitBtdst.hDCi0lhsrc.hDCi0SRCCOPYNextiCase4从右向左移动ForiwTo0Step0.lrBitBtdst.hDCi0lhsrc.hDCi0SRCCOPYNextiCase5从左右两边向中间移动Fori0Tow/2Step0.lrBitBtdst.hDCi0lhsrc.hDCi0SRCCOPYwirBitBtdst.hDC0lhsrc.hDC0SRCCOPYNextiCase6从中间向左右两边移动Foriw/2To0Step0.lrBitBtdst.hDCi0lhsrc.hDCi0SRCCOPYwirBitBtdst.hDC0lhsrc.hDC0SRCCOPYNextiCase7从上下向中间移动Fori0Toh/2Step0.lrBitBtdst.hDC0iwlsrc.hDC0iSRCCOPYhirBitBtdst.hDC0wlsrc.hDC0SRCCOPYNextiCase8从中间向上下移动Forih/2To0Step0.lrBitBtdst.hDC0iwlsrc.hDC0iSRCCOPYhirBitBtdst.hDC0wlsrc.hDC0SRCCOPYNextiCase9列百叶窗Fori0To20SteplForiTowSteplrBitBtdst.hDC06hsrc.hDC0SRCCOPYNextNextiCasel0行百叶窗Fori0To20SteplForiTohSteplrBitBtdst.hDC0w6src.hDC0SRCCOPYNextNextiEndSeectEndSubPrivateSubPicLoadPicsource.PictureLoadPicturectempPicNamepiDispaypicturePicsourcepicdestwiwiwilModllEndSub432007年菏泽学院学报第2期播放背景音乐函数PubicFunctonMuscPiayMMCpm.CommandcioseMMCpm.DevceTypewaveaudoMMCpm.Fieamectempmusc.wavMMCpm.CommandopenMMCpm.CommandpiayEndFuncton..FormLoad事件过程程序运行时首先加载窗体触发该事件.在该事件中通过判断VB的App对象的PreInstance属性值来避免同时运行一个屏幕保护程序的多个实例.同时隐藏鼠标光标、播放背景音乐并且给图片名称数组赋值.PrvateSubFormLoadFrmMan.WndowState2最大化窗体IfApp.PrevInstanceThen应用程序的一个实例已运行UnioadMeExtSubEndIfMuscPiay调用播放背景音乐函数ShowCursorFaise隐藏鼠标的光标Move00Screen.WdthScreen.Heghtpcdest.Move00WdthHeghtForlToUBoundPcamePcamepc.jpgextplw0pcLoadEndSub..TmerlTmer事件过程每隔一定时间就会触发该事件在该过程设置图片的转换和循环播放背景音乐.PrvateSubTmerlTmerpcLoadIfpl0Thenpl图片进入下一个循环MuscPiay音乐循环播放Eiseppl转换图片EndIfEndSub..鼠标光标的显示我们知道要结束屏幕保护程序单击鼠标、移动鼠标或者按下键盘的任意键都可以退出屏幕保护程序同时显示鼠标光标因此要显示鼠标光标结束屏幕保护程序需编写如下代码2在窗体上单击鼠标时显示鼠标退出屏幕保护PrvateSubFormCickShowCursorTrue显示鼠标的光标EndEndSub焦点在窗体时按下键盘任意键时显示鼠标退出屏幕保护PrvateSubFormKeyDownKeyCodeAsIntegerShftAsInte-gerShowCursorTrue显示鼠标的光标EndEndSub在窗体上移动鼠标时显示鼠标退出屏幕保护PrvateSubFormMouseMoveButtonAsIntegerShftAsInte-gerXAsSngieYAsSngieDmCurXCurYAsSngieStatcMovXMovYAsSngie把当前时刻鼠标的坐标赋值给CurXCurYCurXXCurYY初始化MovXMovYIfMovX0AndMovY0ThenMovXCurXMovYCurYExtSubEndIf若鼠标移过两个象素则程序结束IfAbsCurXMovX2OrAbsCurYMovY2ThenShowCursorTrueEndEndIfEndSub在目标图片上单击鼠标时显示鼠标退出屏幕保护PrvateSubpcdestCickShowCursorTrue显示鼠标的光标EndEndSub在目标图片上单击鼠标时显示鼠标退出屏幕保护PrvateSubpcDestmouseMoveButtonAsIntegerShftAsIn-tegerXAsSngieYAsSngieDmCurXCurYAsSngieStatcMovXMovYAsSngie把当前时刻鼠标的坐标赋值给CurXCurYCurXXCurYY初始化MovXMovY532007年刘春英应用VB设计屏幕保护程序第2期IfMoVX0AndMoVY0ThenMoVXCurXMoVYCurYExitSubEndIf若鼠标移过两个象素则程序结束IfAbsCurX-MoVX2OrAbsCurY-MoVY2ThenShowCursorTrueEndEndIfEndSub焦点在目标图片上时按下键盘上的任意键时显示鼠标退出屏幕保护PriVateSubPicDestKeyDownKeyCodeAsIntegerShiftAsIntegerShowCursorTrue显示鼠标的光标EndEndSub3屏幕保护程序的应用79本程序在B6.0/WindowXP下编译通过.要将该程序作为一个屏幕保护程序来运行一般屏幕保护程序的扩展名是SCR在编译前点选“工程/属性”然后点选“生成”标签在应用程序的标题中输入“SCRNSAE电子相册”表示这是一个叫做电子相册的屏幕保护程序.接着点选“文件/生成工程SCRNSAE.EXE”将出现一个保存文件的画面将文件名修改为SCRNSAE.SCR文件然后确认.找到文件SCRNSAE.SCR文件在其上按鼠标右键选取快捷菜单的“安装”完成设定后按下“确定”钮完成屏幕保护程序的安装.本屏幕保护程序和其它屏幕保护程序一样在设定的等待时间里没有任何的输入动作时屏幕保护程序会自动启动移动鼠标就会恢复原来的画面.参考文献1李滋堤杨应成唐大全.用B自制屏幕保护程序J.计算机时代19981113-14.2陈艇.应用B设计电子相册屏幕保护程序J.计算机应用2004246390-391.3肖二钢常国华穆靖.利用B设计屏幕保护程序J.天津理工学院学报199915297-98.4徐敬东.用B开发屏幕保护程序J.九江职业技术学院学报2005123-24.5唐北平吴德健康迎曦.用B创建屏幕保护程序J.邵阳学院学报自然科学版20032256-57.6龚沛曾陆慰民杨志强.isuaBasic程序设计教程6.0版M.北京高等教育出版社2000316-337.7屈晓田.用B编写Windows屏幕保护程序J.山西大学学报自然科学版1998214335-338.8飞思科技产品研发中心.isuaBasic灵感编程M.北京电子工业电出版社2002291-296.9刘韬骆娟.isuaBasic实效编程百例M.第二版.北京人民邮电出版社2004100-103.UsingVBtoDesignScreenSaverProgramLIUChunyingComputerandInformationEngineeringDepartmentHezeUniVersityHezeShandong274015ChinaAbstractScreenSaVerisusedtopreVentburningscreenifpixerdoesnotchangeforaongtime.ThearticedescribesfeaturesofthescreensaVerandthemethodofdesigningscreensaVerprogramandgiVesascreensaVerprograminisuaBasic6.0foraninstance.KeywordsscreensaVerAPIfunctionisuaBasic6.0632007年菏泽学院学报第2期