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

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
VB 5.0中实现鼠标拖放 VB5.0下工具条的制作 VB5.0中基于桌面的屏幕技巧 VB5.0中实现字体闪烁效果 VB5实现窗口图像缩放、滚动技巧 EVC3做的工程到了Pocket PC2003上就运行不起来,必须使用EVC4来重新编译才可以,这样不是很麻烦嘛,大家有没有比较好的方法来解决这个问 得分问题,望各位大虾帮帮忙!正确的都有分! 为什么windows病毒、恶意脚本程序都用vbscript写比较多而不用js? 怎样在打开子窗口的时候让父叶面或者父窗口最小化 windows2000 进程问题!!!!!!!!!!!!!!!! 我使用Microsoft ActiveSync3.7连接Pocket PC2003为什么经常出现说连上了,但看不到内容的情况呀? [100分]求installanywhere5.5.1的破解 斑竹大哥好,我的可用分不见长啊,怎么会事? 微软Teched2003的相关ppt哪儿有的下载啊??? 如图,直线y1=x+m分别与x轴、y轴交于A、B, Jackwas ___ to see his fr 电视机厂计划四月份生产6000台电视机,实际上半月 人民代表大会怎么翻译“中国人民政治协商会议怎么翻译 政府的五套班子是什么如题. 全国人民代表大会和人民政协是否都由中国共产党领导? 全国人民代表大会和人民政协的共同点是1、都是爱国统 国务院和人民代表大会有什么区别 (九)1.She is my child,and 韩总理发表国民谈话 将彻查国情院干涉日东电职员因短信骚扰女性被捕 称为吸美现实版越狱:4囚犯通过浴室天花板通窃听乱了盟友军心 是友是敌难下定论LG正式发布弯曲屏幕手机 自称后盖划重庆警方破获一起特大毒品贩卖案 缴获抗议特殊高中入学标准改革 纽约华人力韩国江原道哨所枪击事件肇事士兵已被抓“天河二号”蝉联全球超级计算机冠军安徽矿业富豪窃取国有铁矿 行贿原副省拔剑我有一块地猎丹梁山小霸王殁神劳动人民文化宫旅游长陵旅游定陵旅游国家大剧院旅游毛主席纪念堂旅游
备案号:鲁ICP备13029499号-2 说三道四 www.s3d4.cn 说三道四技术文摘