📄 vb16.htm
字号:
>Projects” 创 建 一 新 项 目APPIMG.VBP, 在FORM 窗 口 中 创
建PictureBox、CommandButton、HScroll、VScroll 等 对 象, 调 整 各 自 位 置, 并 设 置 各 对 象
的 属 性 如 下: </SPAN><PRE><SPAN class=sfont>
Form:Name = AppImage, ScaleMode = 1
PictureBox:Name = ImageWin, Appearance = 1-3D, ScaleMode = 3
CommandButton:Name = ZoomIn, Caption="Zoom In"
CommandButton:Name = ZoomOut, Caption="Zoom Out"
CommandButton:Name = ExitButton, Caption="Exit"
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 2. 双 击FORM 窗 口, 并 将 下
面 程 序 输 入 到Form 对 象 的Load 事 件 中。 该 程 序 用 于 读 取 图 像 的 宽 度 和 高 度, 初 始 化 常 用
参 数, 载 入 窗 口 图 像, 并 将 图 像 复 制 到FORM 窗 口 的PictureBox 图 形 控 件 容 器 中 显 示。
</SPAN><PRE><SPAN class=sfont>
Private Sub Form_Load()
Dim FileName As String
FileName = "C:\SAMP.BMP"
Open FileName For Binary As #1
Get #1, 19, ImageWidth: Get #1, , ImageHeight
'读取位图的宽度和高度
Close #1
DW = 15 * ImageWidth - ImageWin.Width
'将像点转换为Twip(微点)
DH = 15 * ImageHeight - ImageWin.Height
ImageWin.Width = 15 * ImageWidth
ImageWin.Height = 15 * ImageHeight
AppImage.AutoRedraw = True
AppImage.Caption = FileName
'改变Form窗标题
HScroll1.SmallChange = 100
'设置滚动最小步距
VScroll1.SmallChange = 100
DX = ImageWin.Width: DY = ImageWin.Height
'设置复制图像尺寸
SX = ImageWin.Width: SY = ImageWin.Height
AMP = 1 '设置缩放比例为1
sWin = GetDesktopWindow()
'获取桌面窗口句柄
sDC = GetDC(sWin)
'转换为描述表句柄
hd = BitBlt(ImageWin.hdc, 0, 0, Image.Width,
Image.Height, sDC, 0, 0, &HCC0020)
hd = ReleaseDC(sWin, sDC) '释放窗口描述表
AppImage.ImageWin = LoadPicture(FileName)
'载入图像显示
End Sub
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 3. 在General 对 象
的Declaration 过 程 中 声 明 本 程 序 所 使 用 的WIN95 API 函 数 和 和 过 程, 以 及 各 事 件 程 序 所
使 用 的 全 局 变 量 等。 </SPAN><PRE><SPAN class=sfont>
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
GetDesktopWindow Lib "user32" () As Long
Private Declare Function ReleaseDC Lib "user32"
(ByVal hwnd As Long, ByVal hdc As Long) As Long
Dim sWin, sDC, hd
Dim ImageWidth As Long, ImageHeight As Long
Dim DX, DY, SX, SY, PX, PY, DW, DH, MX, MY, X0, Y0, AMP
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 4. 双 击ImageWin 对 象, 并
在MouseMove 事 件 和Mouse_down 事 件 中 输 入 下 面 程 序, 用 于 窗 口 图 形 的 拖 动 滚 动 处 理。
</SPAN><PRE><SPAN class=sfont>
Private Sub ImageWin_MouseMove(Button As Integer,
Shift As Integer, X As Single, Y As Single)
If (Button And vbLeftButton) > 0 Then
'拖动鼠标滚动图像
MX = HScroll1.Value + (X - X0)
MY = VScroll1.Value + (Y - Y0)
If MX > 0 And MX < HScroll1.Max Then HScroll1.Value = MX
If MY > 0 And MY < VScroll1.Max Then VScroll1.Value = MY
End If
End Sub
Private Sub ImageWin_MouseDown(Button As Integer,
Shift As Integer, X As Single, Y As Single)
X0 = X: Y0 = Y '拖动鼠标初值
End Sub
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 5. 在ZoomIn 控 件
和ZoomOut 的Click 事 件 中 输 入 下 列 程 序, 对 窗 口 图 像 进 行 放 大、 缩 小 处 理。 </SPAN><PRE><SPAN class=sfont>
Private Sub ZoonIn_Click()
If AMP < 5 Then AMP = 2 * AMP
'放大系数小于5,则放大图像
AppImage.ImageWin.PaintPicture ImageWin.Image,
0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
Private Sub ZoomOut_Click()
AppImage.ImageWin.Cls
'清除窗口图像
If AMP > 0.25 Then AMP = AMP / 2
'放大系数大于0.25,则缩小图像
AppImage.ImageWin.PaintPicture
ImageWin.Image, 0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 6. 在HScroll 控 件
和VScroll 控 件 的Change 事 件 中 输 入 下 面 程 序, 对 窗 口 图 像 进 行 滚 动 处 理。 </SPAN><PRE><SPAN class=sfont>
Private Sub HScroll1_Change()
PX = HScroll1.Value * DW / HScroll1.Max
'计算水平滚动位置
AppImage.ImageWin.PaintPicture ImageWin.Image,
0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
Private Sub VScroll1_Change()
PY = VScroll1.Value * DH / VScroll1.Max
'计算垂直滚动位置
AppImage.ImageWin.PaintPicture ImageWin.Image,
0, 0, AMP * DX, AMP * DY, PX, PY, SX, SY
End Sub
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 7. 在ExitButton 控 件
的Click 事 件 中 输 入 下 面 程 序, 用 于 结 束 程 序、 关 闭 窗 口。 </SPAN><PRE><SPAN class=sfont>
Private Sub ExitButton_Click()
End
End Sub
</SPAN></PRE>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> <B>五、 应 用 说 明</B>
</SPAN>
<P><SPAN class=sfont><FONT color=#ffffff>----</FONT> 窗 口 图 像 滚 动 是 各 种 数 据
查 询 系 统、 多 媒 体 图 形 数 据 库 系 统 开 发 中 的 基 本 功 能 之 一, 本 文 用Windows API 函 数 实 现
了 窗 口 图 像 缩 放、 滚 动, 该 方 法 可 适 用 于Visual C++ 等 语 言。 本 文 全 部 程 序 均 在WIN98 环
境 中Visual Basic 5.0 下 调 试 通 过</SPAN>。
<P align=right><A
href="http://www.pconline.com.cn/experience/subject/VB/index.html">----更多的文章</A></P>
<P align=right> <!-- #EndEditable --></P></TD></TR></TBODY></TABLE>
<TABLE align=center border=0 cellPadding=0 cellSpacing=0 width=760>
<TBODY>
<TR>
<TD bgColor=#666666 width=1><IMG height=1 src="vb16.files/blank.gif"
width=1></TD>
<TD align=right vAlign=bottom width=170><IMG height=10
src="vb16.files/blank.gif" width=170><BR></TD>
<TD bgColor=#666666 width=1><IMG height=1 src="vb16.files/blank.gif"
width=1></TD>
<TD width=21><IMG height=1 src="vb16.files/blank.gif" width=21></TD>
<TD bgColor=#eeeeee width=566><IMG height=10 src="vb16.files/blank.gif"
width=566><BR>版权所有©1999 太平洋电脑信息网<BR><FONT
face="Arial, Helvetica, sans-serif"><A
href="mailto:exp@pconline.com.cn">exp@pconline.com.cn</A></FONT> <IMG
height=1 src="vb16.files/hhvisit.html" width=1> </TD></TR></TBODY></TABLE><!-- #EndTemplate --></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -