说三道四技术文摘-感悟人生的经典句子
说三道四 > 文档快照

VB5.0中基于桌面的屏幕技巧

HTML文档下载 WORD文档下载 PDF文档下载
VB5.0中基于桌面的屏幕技巧
作者:金永涛
---- WINDOWS 95 的 桌 面 是 用 户 的 一 个 主 要 工 作 场 所, 如 果 你 能 使 这 个 桌 面 移 动 起 来 或 者 发 生 其 它 变 化, 将 是 一 种 别 具 一 格 屏 幕 特 技 效 果, 而 实 际 上 目 前 具 有 类 似 效 果 的 程 序 并 不 少 见, 比 如Microsoft PLUS! 中 提 供 的 一 种 屏 幕 保 护 程 序, 下 面 介 绍 在VB5.0 中 实 现 桌 面 变 化 特 技 的 基 本 原 理 和 具 体 操 作 过 程。

---- 一、 桌 面 变 化 的 实 质: 这 种 编 程 效 果 的 奥 妙 在 于, 它 不 是 使 真 正 的WINDOWS 95 桌 面 发 生 了 变 化, 而 是 启 动 了 一 个 具 有 黑 色 背 景 的 且 运 行 在 最 大 化 模 式 下 的 应 用 程 序, 在 这 个 程 序 中 复 制 了 一 张 和 桌 面 完 全 一 样 的 图 像, 覆 盖 在 整 个 桌 面 之 上, 通 过 一 些 特 殊 的 操 作 使 这 幅 图 像 在 黑 色 的 背 景 下 发 生 扭 曲、 移 动 等 动 作, 当 结 束 此 程 序 时, 自 然 恢 复 到 原 来 的 桌 面 状 态, 整 个 过 程 连 贯 进 行, 即 可 以 给 人 一 种 桌 面 发 生 变 化 的 假 象。

---- 二、 基 本 实 现 原 理: 首 先 必 须 通 过 有 关 的WINDOWS API 函 数, 取 得 桌 面 窗 口 的 句 柄, 然 后 把 此 桌 面 图 像 放 入 与 屏 幕 尺 寸 相 同 的 图 形 框 或 其 它 图 形 容 器 控 件 之 中, 然 后 以 此 为 图 像 源, 利 用 其 它 图 形 控 件 或 有 关 的 图 像 处 理 函 数, 灵 活 地 控 制 这 幅 图 像, 使 之 产 生 特 殊 的 屏 幕 效 果。 编 程 时 需 要 使 用 下 面 几 个API 函 数:

---- BitBlt: 一 个 较 常 见 的 图 像 处 理 函 数, 完 成 图 像 的 复 制 工 作;

---- GetDC: 获 得 窗 口 的 描 述 表 句 柄;

---- GetDesktopWindow: 返 回 桌 面 窗 口 句 柄;

---- ReleaseDC : 释 放 窗 口 描 述 表;

---- 具 体 的 参 数 格 式 及 使 用 方 法 见 后 面 的 程 序 代 码。

---- 这 里 还 需 要 使 用 一 个VB 内 部 函 数PaintPicture, 语 法 格 式:

PaintPicture Pic,destX,
destY,destWidth,destHeight,
scrX,scrY,scrWidth,scrHeight
其 中Pic: 为 图 片 对 象,
如 图 形 框Picture 等;
destX,destY: 目 标 图 像 位 置;
destWidth,destHeight: 目 标 图 像 尺 寸;
scrX,scrY: 原 图 像 的 裁 剪 坐 标;
scrWidth,scrHeight: 原 图 像 的 裁 剪 尺 寸;

---- 此 命 令 的 功 能 就 是 把 一 个 源 图 像 资 源 任 意 复 制 到 指 定 的 区 域, 其 功 能 相 当 于API 函 数 的BitBlt, 但 使 用 更 为 简 单。

---- 其 中 有 一 点 需 要 说 明, 在VB 通 常 有 两 种 图 形 控 件 可 以 使 用, 即 图 形 框PICTURE 及 图 像 框IMAGE, 其 中PICTURE 具 有 与 窗 体 通 用 的Hdc 句 柄 属 性, 所 以 可 方 便 的 进 行 图 像 复 制, 而IMAGE 最 大 的 优 点 是 具 有Stretch 伸 缩 性, 可 方 便 的 进 行 图 像 的 缩 放 处 理, 所 以 在 编 程 时 会 涉 及 到 把 图 像 从 图 形 框PICTURE 复 制 到 图 像 框IMAGE 的 动 作, 这 里 需 要 澄 清 图 形 框PICTURE 的 两 个 相 似 的 属 性 即PICTURE 及IMAGE, 比 如 一 般 可 用 下 面 的 命 令 在 图 形 框 中 装 入 图 像:

---- Picture1.picture=Loadpicture("c:\windows\setup.bmp")

---- 此 时 可 用 下 面 的 命 令 把 图 像 复 制 到 图 像 框 中:

---- Set Image1.picture=Picture1.Picture

---- 而 利 用 BitBlt 命 令 复 制 到Picture 中 的 图 像 则 不 是 它 的 Picture 属 性, 使 用 上 述 的 复 制 命 令 将 无 法 得 到 真 实 的 图 像, 而 必 须 使 用 其Image 属 性, AutoRedraw 属 性 可 以 引 起Image 改 变,Image 是 指 向 位 图 的 句 柄, 当AutoRedraw 为True 时, 对 象 的hDC 属 性 成 为 指 向 设 备 描 述 体 的 句 柄, 复 制 命 令 为:

---- Set Image1.Picture = Picture1.Image

---- 同 样, 在 针 对 上 述 的Picture 两 种 不 同 的 装 入 图 像 方 法, 使 用 图 像 重 写 命 令PaintPicture 也 需 要 两 种 不 同 的 方 法:

---- PaintPicture Picture1.Image,x,y,Width,Height

---- PaintPicture Picture1.Picture,x,y,Width,Height

---- 三、 一 个 演 示 程 序 的 编 制 过 程

---- 创 建 一 个 新 的 工 程, 在 窗 体 Form1 上 放 置 一 个 图 形 框 Picture1 和 一 个 图 像 框Image1, 置Form1 及 Picture1 的 AutoReadraw 属 性 为True, 置 form1 的BorderStyle 属 性 为 None, 背 景BackColor 为 黑 色, 如 果 想 要 任 务 条 安 全 地 参 加 特 技 运 动, 最 好 使 程 序 运 行 在 最 大 化 模 式, 即 置Form1 的 WIndowState 属 性 为Maximized。 然 后 进 行API 函 数 说 明, 可 通 过API Viewer 直 接 获 得, 把 其 放 入 一 个BAS 模 块 文 件 中, 也 可 以 直 接 放 在 窗 体Form1 代 码 文 件 的General 段 中, 但 此 时 在 函 数 前 面 必 须 加 上Private 关 键 字, 详 见 下 面 的API 说 明, 最 后 文 后 程 序 代 码 填 入 有 关 的 事 件 之 中。 此 演 示 程 序 运 行 之 后 可 实 现 下 面 的 桌 面 特 技 效 果, 任 何 时 候 单 击 图 形 框 可 强 制 退 出 程 序:

---- 1. 桌 面 逐 渐 缩 小: 图 形 的 放 大 缩 小 使 用Image 控 件 最 为 方 便, 实 现 此 特 技 的 关 键 处 就 是 需 要 把 桌 面 图 形 传 递 到 图 像 框IMAGE 之 中, 然 后 置Stretch 属 性 为 真, 逐 渐 修 改IMAGE 的 尺 寸 即 可 使 桌 面 放 大 或 缩 小;

---- 2. 随 机 位 置 显 示 桌 面: 此 效 果 主 要 使 用PaintPicture 命 令, 通 过 随 机 修 改 目 标 图 形 的 起 始 坐 标, 把 桌 面 图 像 写 到 屏 幕 的 随 机 位 置;

---- 3. 桌 面 的 横 向 或 纵 向 滚 动: 此 效 果 只 需 要 把 桌 面 图 形 写 到 一 个 图 形 框Picture 之 中, 然 后 通 过 修 改 此 图 形 框 的 起 始 坐 标, 即 可 以 使 桌 面 在 屏 幕 上 发 生 平 滑 滚 动;

---- 4. 桌 面 上 显 示 文 字 或 图 形: 此 效 果 主 要 使 用VB 的 绘 图 方 法 及Print 命 令, 在VB 中 窗 体 或 图 形 框 均 支 持VB 绘 图 方 法, 下 面 的 程 序 中 先 画 两 个 重 叠 的 实 心 矩 形, 然 后 在 其 上 面 显 示 文 字, 最 终 形 成 带 有 背 景 和 边 框 的 字 符 串;

---- 5. 桌 面 变 暗: 桌 面 变 暗 的 效 果 在 你 关 闭WINDOWS 95 时 即 可 见 到, 在VB 中 要 使 图 形 亮 度 降 低 并 不 件 容 易 的 事, 需 要 多 个API 函 数 及 复 杂 的 编 程, 但 可 通 过 一 种 颜 色 抖 动 的 方 法 解 决, 即 在 桌 面 图 形 上 均 匀 的 写 上 黑 色 象 素, 可 使 图 形 产 生 明 显 的 降 低 亮 度 的 感 觉。

---- 由 于 这 个 演 示 程 序 是 连 续 演 示 上 述 五 种 特 技, 其 效 果 显 得 不 太 理 想, 如 果 你 单 独 使 用 其 中 的 一 种 处 理 方 法, 即 在 正 常 的 桌 面 状 态 下 直 接 使 桌 面 变 化, 将 更 为 理 想。 以 上 给 出 了 用VB 对WINDOWS 95 桌 面 进 行 特 殊 操 作 的 原 理 和 方 法, 实 际 上 利 用 这 个 原 理 加 入VB 中 灵 活 的 图 像 处 理 手 段, 可 以 实 现 对 桌 面 更 为 复 杂 的 其 它 控 制 效 果, 比 如 可 制 作 完 整 的 屏 幕 保 护 程 序, 有 兴 趣 的 读 者 可 以 一 试, 以 上 程 序 在WINDOWS 95 系 统、VB5.0 环 境 下 调 试 通 过。

---- 附 源 程 序 清 单:

---- 注释:API 函 数 引 用

Private Declare Function BitBlt
Lib "gdi32" (ByVal hDestDC As Long,
ByVal X As Long, ByVal Y As
Long, ByVal nWidth As Long,
ByVal nHeight As Long, ByVal
hSrcDC As Long, ByVal xSrc As Long,
ByVal ySrc As Long, ByVal
dwRop As Long) As Long
Private Declare Function GetDC
Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function Get
DesktopWindow Lib "user32" () As Long
Private Declare Function ReleaseDC
Lib "user32" (ByVal hwnd As Long,
ByVal hdc As Long) As Long

注释: 变 量 说 明
Dim sWnd, sDC, hd
注释: 直 接 演 示 特 技 效 果
Private Sub Form_Load()
注释: 置 窗 口 背 景 为 黑 色 无 边 框
注释:Form1.BackColor = 0
注释:Form1.BorderStyle = 0
注释: 修 改 窗 口 尺 寸 与 屏 幕 相 同
Form1.AutoRedraw = True
Form1.Width = Screen.Width
Form1.Height = Screen.Height
Form1.Top = 0
Form1.Left = 0
注释: 修 改PICTURE 尺 寸 与 屏 幕 相 同
Picture1.Width = Screen.Width
Picture1.Height = Screen.Height
Picture1.Top = 0
Picture1.Left = 0
注释: 获 得 桌 面 图 像 句 柄
sWnd = GetDesktopWindow()
sDC = GetDC(sWnd)
hd=BitBlt(Picture1.hdc,0,0,Form1.
Width,Form1.Height,sDC,0,0,&HCC0020)
hd = ReleaseDC(sWnd, sDC)
Picture1.Visible = False
Form1.Show
注释: 修 改IMAGE 尺 寸 与 屏 幕 相 同
Image1.Stretch = True
Image1.Picture = Picture1.Image
Image1.Width = Screen.Width
Image1.Height = Screen.Height
Image1.Top = 0
Image1.Left = 0
注释: 桌 面 逐 渐 缩 小
For i = 0 To Screen.Height / 35
Image1.Visible = False
Image1.Top = 15 * i
Image1.Left = 15 * i
Image1.Width = Screen.Width - 2 * Image1.Left
Image1.Height = Screen.Height - 2 * Image1.Top
Image1.Visible = True
DoEvents
Next i
Image1.Visible = False
注释: 随 机 位 置 显 示 桌 面
For i = 0 To 20
Dim ll As Integer
Dim tt As Integer
ll = Rnd(1) * Screen.Width - Screen.Width / 2
tt = Rnd(1) * Screen.Height - Screen.Height / 2
Form1.PaintPicture Picture1.
Image,ll,tt,Screen.Width,Screen.Height
DoEvents
Next i
注释: 显 示PICTURE 并 清 屏 幕
Picture1.Visible = True
Form1.Cls

注释: 横 向 移 动
For i = 0 To Screen.Width * 2 / 5
Picture1.Left = Picture1.Left + 5
If Picture1.Left > Screen.Width Then
Picture1.Left = -Screen.Width
End If
DoEvents
Next i
注释: 纵 向 移 动
For i = 0 To Screen.Height * 2 / 5
Picture1.Top = Picture1.Top + 5
If Picture1.Top > Screen.Height Then
Picture1.Top = -Screen.Height
End If
DoEvents
Next i
注释: 桌 面 上 显 示 文 字
For i = 0 To 50
With Picture1
.ScaleMode = 3 注释: 以 象 素 为 单 位
.FontTransparent = True
.Font.Size = Rnd * 30 + 10
.Font.Italic = True
.ForeColor = RGB(Rnd * 256, Rnd * 256, Rnd * 256)
.FontName = Screen.Fonts(Rnd * 7 + 14)
End With
hh = Picture1.TextHeight("OK DESKTOP 演 示")
ww = Picture1.TextWidth("OK DESKTOP 演 示")
X = Rnd * (Picture1.ScaleWidth - ww)
Y = Rnd * (Picture1.ScaleHeight - hh)
Picture1.Line(X-2,Y-2)-(X+ww+2,
Y+hh+2),RGB(Rnd*256,Rnd*256,Rnd*256),BF
Picture1.Line(X,Y)-(X+ww,Y+hh),
RGB(Rnd*256,Rnd*256,Rnd*256),BF
Picture1.CurrentX = X
Picture1.CurrentY = Y
Picture1.Print "OK DESKTOP 演 示"
DoEvents
Next i
注释: 桌 面 变 暗
Form1.Picture1.ScaleMode = 3 注释: 以 象 素 为 单 位
For j = 0 To Picture1.ScaleHeight / 2
Picture1.Line(0,2*j)-(Picture1.ScaleWidth,2*j),RGB(0,0,0)
Next j
End Sub
注释: 强 制 退 出 程 序
Private Sub Picture1_Click()
End
End Sub
通晓数学的人就可以当程序员吗? 360发布企业版4.0 可自定义软件白名单 不要总是依赖机器 MongoDB扩展彰显分片功夫 Dell与HP的OpenStack的战略:渠道对抗SLA 路况电台王雷:未来车载系统会是Android的天下 移动周报:2012移动开发工具系列盘点 谷歌不愿错失机会 Android或不再成它人独享 黑客文化:Facebook公布2012年Hackathon大赛顶级“黑客作品” 中国移动音乐开放平台正式对外开放 GitLab 4.0发布 更好地支持PostgreSQL 傻瓜式移动应用开发平台:专访摩讯创始人赵健 日本DeNA进军中国智能电视,与海信战略合作 扎克伯格不仅为Poke编码,而且还“献声” Wordament:首款支持Xbox Live成就的iPhone游戏 使用Storm实现实时大数据分析! 孙博凯:微软日益开放,Windows Azure更加拥抱开源 大数据计算:如何仅用1.5KB内存计算十亿个不同的对象 我们为什么爱EC2和S3却彻底抛弃EBS 不畏Surface:诺基亚明年或推Windows平板 Linus Torvalds:用户程序被破坏永远是Kernel的问题! Python高效编程技巧 苹果加速硬件迭代 iPad5原型机曝光 宏碁推99美金平板 价格创历史新低 黑莓10全键盘版代号N系列,谍照泄露! 那些年我们用过的互联网产品 QQ亿级业务演变:从文件、音视频说起 少年企鹅的成长之旅:QQ体验设计发展史 全球超算Top 500:Linux已占93.8%,Windows或将消失 AWS东部地区再次发生宕机 Netflix等网站受影响 2012年全球最美的十个数据中心 CodeCards:程序员电子贺卡DIY项目 在客户端打开服务器上的Word,PDF等文件时能否限制客户端COPY,另存等功能 分 多了该怎么办呢?:-) DataGrid及水晶报表问题!请高手指点!! 成功安装了oracle8.17,接下来我该怎么配置呢? .net frameword 1.1 C#语言有什么变化? 如何运行一句动态组装的sql语句?? 怪问题!高分求助!!! "面试试题"急求解答。急!!!!!!急!!!! 个人所得税计税基数由原来的800元,修改现计税基数1200元,请修改? 关于权限 javascript中怎样去掉字符串中的空格 求购基于Html的全文检索(用于光盘发布的)相关技术(控件和接口资料) 大家碰到这种问题是怎么解决的??? 如何令窗体只加载一次!Dim aa As New Form2 aa.Show() 关于下载的问题!!!!!!!!非常急!!!!!!!!!!! DB2不能一次插入多条记录么?? 能将数字记钱方式转换为大写的方式? 我没有分了,可是我还有个问题 请问也SQL2000数据库Windows身份验证,SQL Server身份验证的问题?? 关于层的问题! delphi 高难度!有没有人搞得出! 讨论:CSDN该不该分两个区?(入门级与专业级) 各大版主请进 简单问题,在线等待,解决就结稿. 用DES算法算出的注册码怎么是乱字符? <<LINUX与UNIX_SHELL编程指南>>中不懂的问题 分 多了该怎么办呢?:-) 请问怎么读取.txt文件的第n行? 如何将一个象素点设置成某一种颜色(即绘制一个象素点). 如何使一中文网站系统,转成English版的系统呢? 将dbf文件中的一部分字段数据导入到db的一张表中[斑主帮忙] 在线游戏刷新问题,高手接招 关于关闭窗口的超级难题 请各位推荐一下用.net开发的OA产品或者公司 VB.NET问题 框架里如何得到地址栏上的地址?? KEIL C51的中断服务程序如何通过串口返回应答信息? OA中关于流程动态设定的设计问题,谢谢 那里有DB2下载啊? 菜鸟提问:为什么toolbar控件加到窗体上时,大小不能改变?我怎么设置宽和高都是原来样子的 最简单的一个问题 小程序,愿交流 小程序,愿交流 如何用api函数实现服务器和客户端的字符串传输?(讨论和将帖子提前的都有分拿) 如何绕过代理服务器? 急:打开记录集显示 :Timeout expired 那里有Informix下载啊? mouseDown方法为何不能重写? 矢量绘图中如何实现在视窗中输入这样的文本? (来者的分)我要做一个短消息系统应用于办公系统中,请问买一块手机好还是手机模块? 请各位大虾指点哪里有较好的asp教程下载? 利用com实现进程之间数据通信,给出例子或者讲解文章即可 BI和BO是什么关系呢 怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?(400字左右) 怎样理解十二五规划纲要关于经济增长预期目标年均增长 怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?至少600字,麻烦大家了,最晚在下周一就要很急的…… 怎么样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?六百字左右 急求一篇400字左右的论述题,怎样理解“十二五”规划纲要关于经济增长预期目标年均增长7%?RT 带有“排”(只要是同音的排字都可以)成语带有“排”(只要是同音的排字都可以)的成语 求带有‘’排‘字的成语或四字词语,与排同音的也可以 高中生应该在外面报什么英语补习班?例:雅思,托福,新概念,公英?. 文言文中的齐使是一个怎么样的人? 从赵威后的回答中可以看出她是一个什么样的人 新加坡供需两方面给房市降温 房价调控沙特惊人外交之举引争议美国情报机构被曝监听至少35名国际政新加坡房价调控缘何显成效中国周边外交换挡升级外国人如何申请中国绿卡伦敦金属交易所基本金属期货价格24日南宁官方回应“警察枪击抗拆村民” 称北京研究6家高尔夫球场退出水源区 名大妈跳广场舞扰民被泼粪 称嫌吵装隔音郑州多处城中村拆后复建缓慢 村民被迫自强学子还清12万元家债 挣钱后不忘大货车失控扎进冰河 消防员及时到场将大小城市的无间道真爱“饰”言寻找华尔街铜牛押钞员枪支走火身故 特殊职业风险引关保险“潮品”抢滩“元宵情人节”优衣库启动冬季优惠计划Tommy Hilfiger 春季广聪明人不恋战环贸iapm新春点灯迎马年
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘