




已阅读5页,还剩6页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
屏幕保护程序设计思路:设计好窗体,使得窗体运行时全屏幕占有及显示在最顶层。运行时消除光标,退出时响应键盘、鼠标并显示光标。设定好定时器,每隔0.5秒出现一次圆图像,当到达次数时清除画面,并调用画圆程序。把画圆程序设置好,使其能每次随机出现圆个数,并每个圆能有许多同心圆,颜色随机生成。屏幕保护程序需要几点:1、窗体覆盖整个屏幕 move,和保持窗口定位在屏幕的最前端SetWindowsPos。2、去除/显示光标 ShowCursor。3、画圆函数 Circle。1、 窗体在屏幕的最前端是Move 0,0,screen.width,screen.height窗口在屏幕的最前端,用windows的API函数SetWindowsPos ,当使用API函数时可以在VB6.0 API文本浏览器里查找,然后复制粘贴在“一般模块”里。Move指令用法是确定一个方格在form中的位置,其坐标是从(0,0)开始的。 Command1.Move H1 * 0.5, H1 * 0.5, H1 * 7, H1 * 2 Command2.Move H1 * 8, H1 * 0.5, H1 * 7, H1 * 2 Command3.Move H1 * 16, H1 * 0.5, H1 * 7, H1 * 2这里H1代表一个常数的话,方格就从H1 * 0.5, H1 * 0.5中知道第一点(原始点),然后H1 * 7(宽), H1 * 2(高)知道第二点(扩展点),然后以x、y轴方向连接这两点,就形成了扩展。 下面是设置窗口窗体位置的做法:(1)、在“一般模块”新增代码命令 Option Explicit常数定义Public Const HWND_TOPMOST = -1Public Const SWP_NOMOVE = &H2Public Const SWP_NOSIZE = &H1API 函数声明Public Declare Function SetWindowPos Lib user32 (ByVal hwnd As Long, ByVal hwndinserafter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As LongSetwindowpos 函数所使用的参数如表:Hwnd要处理的窗口HWndInserAfterHwnd窗口将插放在zorder顺序的hwndinserafter 窗口之后(zorder 是指窗口叠放的顺序)x、y窗口坐标位cx、cy窗口宽度及高度Wflags窗口显示的标志状态。例如将设置窗口标志为SWP_NOMOVE(不可移动)及SWP_NOSIZE(不可改变大小)注意:h 是类型描述,表示句柄, Wnd 是变量对象描述,表示窗口,所以hWnd 表示窗口句柄。通俗地说,如果把一个到处跑的人当作指针的话,那么HWND就是该人的身份证-我想应该是身份证号码程序中调用setwindowspos 函数 Temp=setwindowpos(hwnd,HWND TOPMOST,0,0,0,0,SWP NOMOVE or SWP NOSIZE)Setwindowpos(要处理的窗口,窗口叠放顺序,窗口坐标位,窗口宽度及高度,窗口显示的标志状态)HWND_TOPMOST:将窗口置于所有非顶层窗口之上。即使窗口未被激活窗口也将保持顶级位置。2、 去除/显示光标 在屏幕保护程序打开时,必须去除光标,而且在结束屏幕保护功能之后,也必须恢复显示光标。可通过API函数showcursor完成。函数声明(查API文本浏览器)Public Declare Function ShowCursor Lib user32 Alias ShowCursor (ByVal bShow As Long) As Long名称功能Showcursor函数会设置一个内部计数器,当计数器大于等于零时,才显示光标Bshow当bshow为TRUE,则内部计数器加1,当bshow为FALSE,则内部计数器减1备注:该函数设置了一个内部显示计数器以确定光标是否显示,仅当显示计数器的值大于或等于0时,光标才显示,如果安装了鼠标,则显示计数的初始值为0。如果没有安装鼠标,显示计数是C1。消除光标:DOLoop until showcursor(False)53、 画圆:circle 【对象名】.circle step (x,y),radius,colorStep目前坐标点为相对参考原点(x,y)圆心坐标Radius半径color颜色过程的分类:1、 事件过程:当发生某个事件时,对该事件作出响应的程序段。如 Public Event Click()2、函数过程(Function):函数过程用来完成特定的功能并返回相应的结果。在事件或其它过程中可按名称调用函数。函数过程能够返回接受参数,并且总是以该函数名返回一个值。这类过程一般用于完成计算任务。 如 Public Function click() End Function3、子过程(sub):子过程是没有返回值的函数。在事件过程或其它过程中可按名称调用子过程。子过程能接收到参数,并可用于完成过程中的任务且返回一些数值。但是,与函数过程不同,子过程不返回与其特定子过程名相关联的值。子过程一般用于接收或处理输入数据、显示输出或者设置属性。 子过程就是用来接收函数完成一个大任务的,用的最多。函数过程就是用来完成特定单一任务并返回一个与函数名相关的值,事件过程不返回值,只是对事件触发的响应。 Step1、窗体设计 在窗体中添加定时器,并把timser1的Interbal属性定为500,即每500/1000=0.5秒,触发事件一次。这里注意定时器是默认单位是1/1000秒触发的。修改窗体的borderstyle=0使其失去标题栏。修改窗体底色(backcolor)为黑色。Step2 : Option ExplicitDim cout As Integer 定义变量,用来记录画圆次数Step3:Private Sub Form_Load() 程序初始化的动作结果,就是将窗体显示在屏幕最前端、放大窗体窗口至整个屏幕,画圆次数初始值为0,消除光标。Dim temptemp = SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE Or SWP_NOSIZE)将窗体置于屏幕显示的最前端,而且不接受移动或改变大小Move 0, 0, Screen.Width, Screen.Height将窗体覆盖整个屏幕cout = 0画圆次数初始值Do 消除光标Loop Until ShowCursor(False) 5End SubStep7:在timer1_timer事件程序中输入程序,使得定时器每隔0.5,秒引发定时事件,来进行绘图动作。Private Sub Timer1_Timer() 0.5秒出现绘一次圆(多个)If cout = 10 Then 画圆次数至10次,重新清除屏幕画面cout = 0 从新计数Cls 清除画面图形Elsecout = cout + 1 不够十次,画圆次数加1End Ifpainting Me 调用画圆副程序End SubStep8:在“一般模块”中输入画圆函数。Public Sub painting(desk As Object) 画圆Dim i, j, num, rad, x, y, r, g, b As Integernum = Int(Rnd * 10 + 1) 生成110的随机个圆,表示屏幕出现圆的个数For i = 1 To num 每个圆出现的位置即半径 rad = Int(Rnd * 1000 + 30) 半径 x = Int(Rnd * Screen.Height) 圆心y = Int(Rnd * Screen.Width) 圆心For j = 20 To rad Step 30 在每一个圆出现后,都有同心圆出现 以大圆的半径为基准,20到rad,步长递增30来确定有几个同心圆r = Int(Rnd * 256) 原色 红 随机生成0255g = Int(Rnd * 256) 原色 绿b = Int(Rnd * 256) 原色 蓝desk.Circle (x, y), j, RGB(r, g, b) 两个for循环,当外for一次时,画一个大圆,循环依据是随机生成圆个数。如随机生成5个大圆,则循环五次,每次在内for里都生成同心圆,这也是屏幕出现的圆的个数。内for是用来给这个大圆画许多同心圆的。其循环依据是大圆的半径。desk.Circle (x, y), j, RGB(r, g, b)就可以表示出这些同心圆包括那个大圆在内。 NextNext进阶设计:Step1:在“一般模块”状态下输入main程序内容,判断窗体是否存在和进行窗体加载。使用API函数里的findwindow函数,确认窗体存在与否。一个窗口有2个部分组成,1个是窗口的类名,一个是窗口的窗口名称。通常情况下,我们自己做的窗口类名和窗口名称都是知道的,因为是自己给它们加上去的。但对于模板窗口,我们一般是不知道它的类名的,但它的窗口名称是可以知道的,就是显示在标题栏中的标题,就是它的窗口名称。 当有2个窗口在桌面上时,一个窗口有个编辑框,而另一个没有编辑框。当我们想要用那个有编辑框的窗口时,必须先得到那个窗口的句柄,FindWindow就是帮助我们取得这个窗口句柄。 我们可以任意指定FindWindow中两个参数的其中一个,或同时2个都指定来找到那个带有编辑框的窗口,然后FindWindow就会返回这个窗口的句柄(hwnd)。 窗口类名好比人的小名,窗口标题名称好比是人的大名。 我们一般知道一个人的大名,但不太清楚他的小名如对话框的类名#32776。FindWindow给了我们两个参数,以便我们在不知道一个人小名的情况下,可以通过大名来找到该人。 vbNullString可以指定为NULL/0.变量名怎么会取这样的名字?难道是从VB里挖来的代码?可VB又不是这样的语法!P.S.大名一样的人肯能会有不至一个,小名也如此,这个时候还会涉及到路径算法。Public Sub Main()If unique(form1) = False ThenExit SubEnd Ifform1.ShowEnd SubPublic Function unique(FormCap As String)Dim HWin As Long HWin = FindWindow(vbNullString, FormCap) 窗体是否存在 If HWin = 0 Then unique = True 不存在 Else
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025电子产品采购销售合同协议范本
- 7 静电现象的应用说课稿-2025-2026学年高中物理人教版选修3-1-人教版2004
- 2025年大学生实操考试试题及答案
- 网络安全培训情况课件
- 8.1 生命可以永恒吗 说课稿 - 2023-2024学年统编版道德与法治七年级上册
- 第十八课 珍爱生命珍爱生活教学设计-2025-2026学年初中心理健康龙教版八年级下册-龙教版
- 中级煌工考试题及答案
- 招标代理公司培训课件
- 儿童保健培训课件模板
- 职高插画师考试题目及答案
- 幼儿园获奖公开课:中班语言活动《哈哈镜》课件
- 2025年中外合资企业合作框架协议模板
- 《餐饮点菜》课件
- 公司财务知到智慧树章节测试课后答案2024年秋北京第二外国语学院
- 2025年天马微电子股份有限公司招聘笔试参考题库含答案解析
- 2025年浙江事业单位联考真题解析历年高频重点提升(共500题)附带答案详解
- 防止人身伤亡事故培训课件(共139张)
- 宣传物料技术服务方案设计
- 检验科质量管理手册
- 幼儿园讲解海军知识
- 《中国货币发展史》课件
评论
0/150
提交评论