Form中用picture做背景,800*600的图片,改换显示器分辨率后存在问题。急!!!

shitalone 2002-11-25 09:45:24
Form初始化时定义状态为最大化。
800*600的图片,现在发现,显示模式如果换成640*480,背景图片只能出来640*480的一部分,而且原来在窗体最右边的控件由于位置在640*480之外,也看不到了。

可想而知,如果显示模式为1024*768,背景只能显示在窗体的的左上部分,控件也挤在左上角。

控件考虑大小和位置都使用相对的了,可是背景图片如何能够实现自动缩放呢。

大虾们快帮帮忙,有代码例子就更好了。
...全文
189 点赞 收藏 10
写回复
10 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
suntt 2002-12-26
用StretchBlt
stretchblt picture2.hdc,0,0,picture2.width,picture2.height,
picture1.hdc,0,0,picture1.width,picture1.height
回复
xks 2002-12-26
在form1的resize中设置图片框的高宽值 !
回复
feixuehenshui 2002-12-25
On Error GoTo err
If CheckRez(800, 600) = True Then
Me.Picture = LoadPicture(App.Path & "\photo\xhtu800.jpg")
ElseIf CheckRez(1024, 768) = True Then
Me.Picture = LoadPicture(App.Path & "\photo\xhtu1024.jpg")
Else
MsgBox "分辨率太低(太高)可能不能正常显示!建议最低使用800*600的分辨率!", vbInformation, "警告"
End If
err:
Exit Sub

***************************************************
模块里面加入:
Public Function CheckRez(pixelWidth As Long, pixelHeight As Long) As Boolean
Dim lngTwipsX As Long
Dim lngTwipsY As Long
lngTwipsX = pixelWidth * 15
lngTwipsY = pixelHeight * 15
If lngTwipsX <> Screen.Width Then
CheckRez = False
Else
If lngTwipsY <> Screen.Height Then
CheckRez = False
Else
CheckRez = True
End If
End If
End Function

回复
shitalone 2002-11-25
GLAY((东厂人马:西门吹水))
不要平铺,缩放就可以了,目的就是保证图形能完整的显示出来。

我这样写的,可是屏幕最开始有图片,然后闪动一下,图片就没了。
我先用一个picture控件picture2将图片引在里面,然后如下用picture1.paintpicture。

Private Sub Form_Paint()
Picture1.Left = 0
Picture1.Top = 0

Picture1.Width = Screen.ActiveForm.Width
Picture1.Height = Screen.ActiveForm.Height
width1 = Picture1.Width
height1 = Picture1.Height

Picture1.PaintPicture Picture2, 0, 0, width1, height1

End Sub
回复
GLAY 2002-11-25
图片平铺要吗?
设picture1 的borderstyle 为 0 - none
你在form上加一个picturebox , 设上图片..
之后

Private Sub Form_Paint()
Dim wid As Single
Dim hgt As Single
Dim x As Single
Dim y As Single

wid = Picture1.ScaleWidth
hgt = Picture1.ScaleHeight
y = 0
Do While y < ScaleHeight
x = 0
Do While x < ScaleWidth
PaintPicture Picture1.Picture, _
x, y, wid, hgt
x = x + wid
Loop
y = y + hgt
Loop
End Sub
回复
shitalone 2002-11-25
泣血求助。。。。。。。。。。。。。
回复
shitalone 2002-11-25
288794() , griefforyou(为你伤心)
能否详细一些,有些代码示例就最好了,现在急等用,上午程序就得和大家见面了。
回复
griefforyou 2002-11-25
1.用Image控件

2.用PaintPicture来缩放
回复
288794 2002-11-25
在 Paint 事件里面处理图象
回复
zyl910 2002-11-25

PaintPicture 方法


用以在 Form, PictureBox 或 Printer 上绘制图形文件(.bmp、.wmf、.emf、.cur、.ico或 .dib)的内容。不支持命名参数。

语法

object.PaintPicture picture, x1, y1, width1, height1, x2, y2, width2, height2, opcode

PaintPicture 方法的语法包含下列部分:

部分 描述
object 可选的。一个对象表达式,其值为“应用于”列表中的一个对象。如果省略 object,带有焦点的 Form 对象缺省为 object。
Picture 必需的。要绘制到 object 上的图形源。Form 或 PictureBox 必须是 Picture 属性。
x1, y1 必需的。均为单精度值,指定在 object 上绘制 picture 的目标坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。
Width1 可选的。单精度值,指示 picture 的目标宽度。object 的 ScaleMode 属性决定使用的度量单位。如果目标宽度比源宽度 (width2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源宽度。
Height1 可选的。 单精度值,指示 picture 的目标高度。object 的 ScaleMode 属性决定使用的度量单位。如果目标高度比源高度 (height2) 大或小,将适当地拉伸或压缩 picture。如果该参数省略,则使用源高度。
x2, y2 可选的。均为单精度值,指示 picture 内剪贴区的坐标(x-轴和y-轴)。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则缺省为 0。
Width2 可选的。单精度值,指示 picture 内剪贴区的源宽度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源宽度。
Height2 可选的。 单精度值,指示 picture 内剪贴区的源高度。object 的 ScaleMode 属性决定使用的度量单位。如果该参数省略,则使用整个源高度。
Opcode 可选的。是长型值或仅由位图使用的代码。它用来定义在将 pictur 绘制到 object 上时对 picture 执行的位操作(例如, vbMergeCopy 或 vbSrcAnd 操作符)。关于位操作符常数的完整列表,请参阅 Visual Basic Help 文件中的 RasterOp Constants 主题。
在使用opcode时有一些限制。例如,如果资源是图标或图元文件,则只能使用 vbSrcCopy,而不能使用其他的opcode;并且,与图案 (或 SDK 术语中的"画笔"),如 MERGECOPY、 PATCOPY、 PATPAINT 和 PATINVERT,相交互的opcode实际上是同目标的 FillStyle 属性交互。

注意 Opcode 用于将按位操作传递到位图。当传递其他图象类型时将一个值给该参数会造成“无效过程调用或参数”错误。这是设计的原因。要避免这个错误,对于除位图外的图象,将 Opcode 参数置为空。



说明

通过使用负的目标高度值 (height1) 和 / 或目标宽度值 (width1) ,可以水平或垂直翻转位图。

可以省略任何多个可选的尾部的参数 。如果省略了一个或多个可选尾部参数,则不能在指定的最后一个参数后面使用逗号。如果想指定某个可选参数,则必须先指定语法中出现在该参数前面的全部参数。

注意,在将一个.Bmp加载入 PictureBox 控件和使用 Windows API 函数 BitBlt() 添加图片之间有一点不同。当您对一个图象使用 BitBlt() 时,PictureBox 控件不知道象您使用 LoadPicture方法那样去调整大小。将 ScaleWidth 和 ScaleHeight 属性设置为图象的大小也不起作用。如果您想在使用 BitBlt 之后用 PictureBox 调整新图片的大小,必须用代码手工做,转换单位并处理边框,下面是如何这样做的一个简单示例:

Sub ResizePictureBoxToImage(pic as PictureBox, twipWd _
as Integer, twipHt as Integer)
' 该代码假设所有的单位都为缇。如果
' 不是,必须在调用该例程之前,转换为缇。
' 这里也假设图象显示在0,0处。
Dim BorderHt as Integer, BorderWd as Integer
BorderWd = Pic.Width - Pic.ScaleWidth
BorderHt = Pic.Height - Pic.ScaleHeight
pic.Move pic.Left, pic.Top, twipWd + BorderWd, _
twipHt + BorderHt
End Sub
回复
发帖
VB基础类
创建于2007-09-28

7522

社区成员

VB 基础类
申请成为版主
帖子事件
创建了帖子
2002-11-25 09:45
社区公告
暂无公告