过路的朋友。来看看,一个很简单的问题,我就是不行!

zqonline 2003-09-30 12:08:36
我在窗体上放了一张图片用的form1.pictre属性,没有用图版框控件!
那位朋友教我让这背景图随窗口大小变化啊!
我的窗口是MDI父窗体!
...全文
45 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
zqonline 2003-10-01
  • 打赏
  • 举报
回复
我还是用Image1搞定了!结贴!
program2100 2003-09-30
  • 打赏
  • 举报
回复
在Resize事件里处理
zqonline 2003-09-30
  • 打赏
  • 举报
回复
是不是太简单了。没有人讲啊!
海牛 2003-09-30
  • 打赏
  • 举报
回复
另外,GetDc和GetWindowDc没有用,可以删除!
海牛 2003-09-30
  • 打赏
  • 举报
回复
另外,GetDc和GetWindowDc没有用!可以删除!
海牛 2003-09-30
  • 打赏
  • 举报
回复
完全用Api比较麻烦,我有一个折中的办法,不知道合不合你的意思。
'说明一下:
'你需要将图片先加载到Picture1中
'再添一个Picture2和Picture3
'将Picture1和Pictures2放到Picture3中
'将Picture3的Visible设为False
'所有图片框的AutoRedraw设为True,ScaleMode设为3
'
'

Option Explicit
Private Declare Function StretchBlt Lib "gdi32" (ByVal hdc 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 nSrcWidth As Long, ByVal nSrcHeight As Long, ByVal dwRop As Long) As Long
Private Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
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 GetWindowDC Lib "user32" (ByVal hwnd As Long) As Long

Dim lWB As Long
Dim lHB As Long

Private Sub MDIForm_Load()
lWB = Me.Picture1.ScaleWidth
lHB = Me.Picture1.ScaleHeight
End Sub

Private Sub MDIForm_Resize()
Dim lH As Long
Dim lW As Long
Dim lHdc As Long


lW = Me.ScaleWidth / Screen.TwipsPerPixelX
lH = Me.ScaleHeight / Screen.TwipsPerPixelY
Me.Picture2.Height = Me.ScaleHeight
Me.Picture2.Width = Me.ScaleWidth
lHdc = Me.Picture2.hdc
StretchBlt lHdc, 0, 0, lW, lH, Me.Picture1.hdc, 0, 0, lWB, lHB, vbSrcCopy
Set Me.Picture = Me.Picture2.Image
Me.Show
End Sub

^_^试一试!
hdvcd 2003-09-30
  • 打赏
  • 举报
回复
楼主的意思是不是在拉动窗体时只想改变背景图大小而控件大小不变化?
easydone 2003-09-30
  • 打赏
  • 举报
回复
试试使用API.
zqonline 2003-09-30
  • 打赏
  • 举报
回复
hdvcd(cd)
你的的控件,根据窗体变化而变化!
我的意思是。窗体的背景图,随窗体大小而变化!
hdvcd 2003-09-30
  • 打赏
  • 举报
回复
控件大小随窗体自动变化:

'窗体部分
Private Sub Form_Load()
Call ResizeInit(Me) '在程序装入时必须加入
End Sub
Private Sub Form_Resize()
Call ResizeForm(Me) '确保窗体改变时控件随之改变
End Sub

'模快部分
Option Explicit
Private FormOldWidth As Long
'保存窗体的原始宽度
Private FormOldHeight As Long
'保存窗体的原始高度

'在调用ResizeForm前先调用本函数
Public Sub ResizeInit(FormName As Form)
Dim Obj As Control
FormOldWidth = FormName.ScaleWidth
FormOldHeight = FormName.ScaleHeight
On Error Resume Next
For Each Obj In FormName
Obj.Tag = Obj.Left & " " & Obj.Top & " " _
& Obj.Width & " " & Obj.Height & " "
Next Obj
On Error GoTo 0
End Sub

'按比例改变表单内各元件的大小,在调用ReSizeForm前先调用ReSizeInit函数
Public Sub ResizeForm(FormName As Form)
Dim Pos(4) As Double
Dim i As Long, TempPos As Long, StartPos As Long
Dim Obj As Control
Dim ScaleX As Double, ScaleY As Double

ScaleX = FormName.ScaleWidth / FormOldWidth
'保存窗体宽度缩放比例
ScaleY = FormName.ScaleHeight / FormOldHeight
'保存窗体高度缩放比例
On Error Resume Next
For Each Obj In FormName
StartPos = 1
For i = 0 To 4
'读取控件的原始位置与大小

TempPos = InStr(StartPos, Obj.Tag, " ", vbTextCompare)
If TempPos > 0 Then
Pos(i) = Mid(Obj.Tag, StartPos, TempPos - StartPos)
StartPos = TempPos + 1
Else
Pos(i) = 0
End If
'根据控件的原始位置及窗体改变大小的比例对控件重新定位与改变大小
Obj.Move Pos(0) * ScaleX, Pos(1) * ScaleY, _
Pos(2) * ScaleX, Pos(3) * ScaleY
Next i
Next Obj
On Error GoTo 0
End Sub

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧