*现有一幅底图(JPG格式)大于MDI窗口,如1024*768,窗口在运行时可以改变大小,*问题是:如何使底图始终充满MDI窗口(缩放充满方式),而不是在窗口缩小时只显示图
片的左上角(切割方式)?
片的左上角(切割方式)?
解决方案 »
- 请问:VB中!运算符的意义和用法
- 急急急急急急急急急急急急急急急急急急急急急急急急急急急急急急,VB菜鸟问,急急急急急急急急急急急急急急急急急急急急急急急急急急急急
- 各位大虾,如何在VB中实现程序运行后,最小化时图标在时间显示栏..
- 添加数据表时,用什么方法知道有没有同名的数据表???
- 如何把Check4(i).Caption加入到Access的数据表中的某个列中
- 如何强行删除一个文件
- 帮帮我,, 200分给你,这个程序的最后一步了.
- 怎样在vb中编写ftp程序,自动把本地硬盘资料丢到ftp服务器上去?
- vb中如何实现可停放式工具栏(送上500分)
- FORM的backgound能不能像WINDOWS系统那样平铺的放。
- 请教WMI有版本不同吗,我怎么不能用(Win32_Processor)?
- 初学者:一个电脑上从com1发数据,从com2收数据.....
载背景图片
'在放置一个timer控件相应的菜单项,然后mdi窗体粘贴如下代码Option ExplicitPrivate 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 CreateCompatibleDC Lib "gdi32" (ByVal lDC As Long)
As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal lDC As Long) As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal lDC As Long, ByVal
hObject As Long) As LongDim pic As StdPicture, hMemDC As Long, pHeight As Long, pWidth As LongPrivate Sub MDIForm_Load()
picHolder.Visible = False
picWork.Visible = False
picWork.AutoRedraw = True
picWork.AutoSize = True
pHeight = picWork.Height
pWidth = picWork.Width
Set pic = picWork.Picture
Set picWork.Picture = Nothing
picWork.AutoSize = False hMemDC = CreateCompatibleDC(picWork.hDC)
SelectObject hMemDC, pic.Handle
End SubPrivate Sub MDIForm_Resize()
Timer1.Enabled = False
Timer1.Enabled = True
End SubPrivate Sub MDIForm_Unload(Cancel As Integer)
Set pic = Nothing
DeleteDC hMemDC
End SubPrivate Sub mnuCenter_Click()
mnuTile.Checked = False
mnuCenter.Checked = True
MDIForm_Resize
End SubPrivate Sub mnuTile_Click()
mnuTile.Checked = True
mnuCenter.Checked = False
MDIForm_Resize
End SubPrivate Sub Timer1_Timer()
Timer1.Enabled = False
If WindowState <> vbMinimized Then
Dim X As Long, Y As Long
picWork.BackColor = BackColor
picWork.Move 0, 0, ScaleWidth, ScaleHeight
If mnuTile.Checked Then
For X = 0 To ScaleWidth Step pWidth
For Y = 0 To ScaleHeight Step pHeight
BitBlt picWork.hDC, X \ Screen.TwipsPerPixelX, Y \
Screen.TwipsPerPixelX, pWidth \ Screen.TwipsPerPixelX, pHeight \
Screen.TwipsPerPixelY, hMemDC, 0, 0, vbSrcCopy
Next
Next
Else
X = (ScaleWidth - pWidth) \ 2: X = X \ Screen.TwipsPerPixelX
Y = (ScaleHeight - pHeight) \ 2: Y = Y \ Screen.TwipsPerPixelY
BitBlt picWork.hDC, X, Y, pWidth \ Screen.TwipsPerPixelX,
pHeight \ Screen.TwipsPerPixelY, hMemDC, 0, 0, vbSrcCopy
End If
Set Picture = picWork.Image
Visible = False
Visible = True
End If
End Sub
Private Sub mnuSelectGround_Click()
On Error GoTo Errhandle
Dim fName As String, sName As String, OfName As OPENFILENAME
OfName.lStructSize = Len(OfName)
OfName.hwndOwner = hwnd
OfName.hInstance = App.hInstance
OfName.lpstrFilter = "图片文件" & Chr(0) & "*.Bmp;*.jpg;*.jpeg;*.gif;*.ico"
OfName.lpstrFile = Space(255) & Chr(0)
OfName.nMaxFile = 256
OfName.lpstrFileTitle = Space(255) & Chr(0)
OfName.nMaxFileTitle = 256
OfName.lpstrTitle = "选择图片..."
OfName.flags = OFN_LONGNAMES + OFN_PATHMUSTEXIST + OFN_FILEMUSTEXIST + OFN_HIDEREADONLY
If GetOpenFileName(OfName) Then
Screen.MousePointer = 11
DoEvents
SaveSetting "OrientZiXun", "BackGround", "PathValue", OfName.lpstrFile
frmBack.SetBack
frmBack.Hide
Screen.MousePointer = 0
End If
Exit Sub
Errhandle:
Screen.MousePointer = 0
ErrView Err.Description
End Sub
'添加一个背景窗口:frmBack,在窗口里面定义一个公共的设置背景函数,里面放一个PictureBox控件,设置AUTOSIZE为TRUE
Public Sub SetBack()
On Error Resume Next
Dim i As Long, j As Long, ls_Path As String
ls_Path = GetSetting("OrientZiXun", "BackGround", "PathValue")
If Trim(ls_Path) <> "" Then
If Dir(ls_Path) <> "" Then
picBack.Picture = LoadPicture(ls_Path)
Else
picBack.Picture = LoadPicture(ls_Path)
End If
Else
picBack.Picture = imgDefault.Picture
End If If frmMain.mnuLaShen.Checked Then'拉伸
Me.PaintPicture picBack.Picture, 0, 0, frmMain.Width, frmMain.Height - 1800
Else'平铺
For j = 0 To frmMain.ScaleHeight Step picBack.ScaleHeight
For i = 0 To frmMain.ScaleWidth Step picBack.ScaleWidth
Me.PaintPicture picBack.Picture, i, j
Next
Next
End If
' Me.Font.Name = "楷体_GB2312"
' Me.ForeColor = vbWhite
' Me.Font.Size = 24
' Me.FontBold = True
' Me.CurrentX = frmMain.ScaleWidth - 3300
' Me.CurrentY = frmMain.ScaleHeight - 2500
' Me.Print "咨询管理系统"
frmMain.Picture = Me.Image
frmBack.Tag = Val(frmBack.Tag) + 1
frmMain.BackColor = Val(frmBack.Tag)
End Sub'在模块中
Public Type OPENFILENAME
lStructSize As Long
hwndOwner As Long
hInstance As Long
lpstrFilter As String
lpstrCustomFilter As String
nMaxCustFilter As Long
nFilterIndex As Long
lpstrFile As String
nMaxFile As Long
lpstrFileTitle As String
nMaxFileTitle As Long
lpstrInitialDir As String
lpstrTitle As String
flags As Long
nFileOffset As Integer
nFileExtension As Integer
lpstrDefExt As String
lCustData As Long
lpfnHook As Long
lpTemplateName As String
End Type'系统全局常量========================================================================
Public Const OFN_LONGNAMES = &H200000
Public Const OFN_PATHMUSTEXIST = &H800
Public Const OFN_FILEMUSTEXIST = &H1000
Public Const OFN_HIDEREADONLY = &H4
Public Const OFN_EXPLORER = &H80000
Public Const OFN_OVERWRITEPROMPT = &H2Public Declare Function GetOpenFileName Lib "comdlg32.dll" Alias "GetOpenFileNameA" (pOpenfilename As OPENFILENAME) As Long
Picture1.Visible = False
Picture1.Picture = LoadPicture("fasdfsdf.jpg")
End SubPrivate Sub Form_Resize()
Me.AutoRedraw = True
Me.PaintPicture Picture1.Picture, 0, 0, Me.ScaleWidth, Me.ScaleHeight
Me.AutoRedraw = False
End Sub
Picture1.AutoSize = True
to watt(瓦特):
你的方法可以,但我所有的MDIchild的窗口都无法show到图片上面而成为不可见的窗口,你能帮我解决这一问题吗?to ch21st(风尘鸟):
你的方法中的Time如何设置, mnuTile.Checked = False mnuCenter.Checked = True
没有定义,请告之在哪里定义,是一个复选框吗?
Private Sub MDIForm_Resize()
Timer1.Enabled = False <===这行有意义吗?
Timer1.Enabled = True
End Subto cuizm(射天狼):你的方法与watt(瓦特)方法的原理一样,虽然没有试,但我觉得应有同样的问题存在吧,你用测试过吗?
你是放了一个PictureBox上去吧?,这样的话,MDI的工作区就被PictureBox占去了,
也就没有地方Show子窗体,我以前是用动态计数在显示的子窗体的个数(或计数)来
决定作背景的PictureBox是否显示的,很容易写的,你试试吧!
你的意思是说同一时刻MDI中只能要么显示子窗体,要么显示PictureBox,两者只能取其一,