VB frame背景图片问题

作者&投稿:麻居 (若有异议请与网页底部的电邮联系)
vb frame显示图片~

frame 一般不能透明
要自己做一个
Public Declare Function DrawEdge Lib "user32" (ByVal hdc As Long, qrc As RECT, ByVal edge As Long, ByVal grfFlags As Long) As Long
'DrawEdge Constants
Public Const BDR_RAISEDOUTER = &H1
Public Const BDR_SUNKENOUTER = &H2
Public Const BDR_RAISEDINNER = &H4
Public Const BDR_SUNKENINNER = &H8

Public Const BDR_OUTER = &H3
Public Const BDR_INNER = &HC
Public Const BDR_RAISED = &H5
Public Const BDR_SUNKEN = &HA

Public Const EDGE_RAISED = (BDR_RAISEDOUTER Or BDR_RAISEDINNER)
Public Const EDGE_SUNKEN = (BDR_SUNKENOUTER Or BDR_SUNKENINNER)
Public Const EDGE_ETCHED = (BDR_SUNKENOUTER Or BDR_RAISEDINNER)
Public Const EDGE_BUMP = (BDR_RAISEDOUTER Or BDR_SUNKENINNER)

Public Const BF_LEFT = &H1
Public Const BF_TOP = &H2
Public Const BF_RIGHT = &H4
Public Const BF_BOTTOM = &H8

Public Const BF_TOPLEFT = (BF_TOP Or BF_LEFT)
Public Const BF_TOPRIGHT = (BF_TOP Or BF_RIGHT)
Public Const BF_BOTTOMLEFT = (BF_BOTTOM Or BF_LEFT)
Public Const BF_BOTTOMRIGHT = (BF_BOTTOM Or BF_RIGHT)
Public Const BF_RECT = (BF_LEFT Or BF_TOP Or BF_RIGHT Or BF_BOTTOM)

DrawEdge 窗体绘图句柄(HDC), 目标矩形, EDGE_ETCHED, BF_RECT
其中: 1) 目标矩形表示 Frame 的位置(X,Y) 和 大小(Width,Height)
2) 必须以逻辑坐标表示(即转换为像素)

在Microsoft Forms 2.0控件组中的单选按钮可以透明,Frame可以用线框或Microsoft Forms 2.0中的Image来代替,不过它们不能作为容器控件。

可以用图片框作Frame,在载入时把被它覆盖的窗口背景部分图像复制到图片框模仿透明效果。
下面代码把图片框Picture1覆盖的窗口背景复制图片框里:
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 LongPrivate Declare Function GetClientRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As LongPrivate Declare Function ClientToScreen Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As LongPrivate Declare Function ScreenToClient Lib "user32" (ByVal hwnd As Long, lpPoint As POINTAPI) As LongPrivate Type RECT Left As Long Top As Long Right As Long Bottom As LongEnd TypePrivate Type POINTAPI x As Long y As LongEnd TypePrivate Sub Form_Load() With Picture1 .AutoRedraw = True Me.Show .Visible = False DoEvents Dim rc As RECT GetClientRect .hwnd, rc Dim P As POINTAPI P.x = rc.Left P.y = rc.Top ClientToScreen .hwnd, P ScreenToClient Me.hwnd, P BitBlt .hDC, 0, 0, rc.Right - rc.Left, rc.Bottom - rc.Top, Me.hDC, P.x, P.y, vbSrcCopy .Visible = True End WithEnd Sub

'frame本身不具备背景图片功能
'以下是我用API做的一个例子
'本来打算用LoadImage做,不过LoadPicture支持的图片格式多一点。
'frame控件没有AutoRedraw属性,所以我在Form_Paint里加了一些代码,解决了最小化窗体后图片消失的问题。(还有个问题:改变窗体大小的时候如果窗体覆盖图片区域会使图片消失,解决办法明天附上,太晚了,睡觉。)

Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal hObject As Long) As Long
Private Declare Function CreateCompatibleDC Lib "gdi32" (ByVal hdc As Long) As Long
Private Declare Function DeleteDC Lib "gdi32" (ByVal hdc 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 GetDC Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long

Dim fWidth As Integer, fHeight As Integer

Private Sub Form_Load()

Me.Show

DoEvents

Call FrameDImg(Frame1, "D:\壁纸\080505081302_5.jpg")

End Sub

Private Sub Form_Paint()

If Me.Width = fWidth And Me.Height = fHeight Then

DoEvents

Call FrameDImg(Frame1, "D:\壁纸\080505081302_5.jpg")

Else

fWidth = Me.Width

fHeight = Me.Height

End If

End Sub

Private Sub FrameDImg(oFrame As Object, ImgFilePath As String) 'FrameDImg(控件名称,图片文件的路径)

Dim FrmDc As Long, ImgDc As Long

Dim pBmp As IPictureDisp

Set pBmp = LoadPicture(ImgFilePath)

ImgDc = CreateCompatibleDC(0)

SelectObject ImgDc, pBmp.Handle

FrmDc = GetDC(oFrame.hwnd)

BitBlt FrmDc, 0, 0, oFrame.Width, oFrame.Height, ImgDc, 0, 0, vbSrcCopy

Set pBmp = Nothing

DeleteDC ImgDc

ReleaseDC oFrame.hwnd, FrmDc

End Sub

直接把frame放到picturebox里,然后把frame设置成不可见,picturebox的appearance设置成flat,填上背景图。岂不妙哉?

上面的方法真烦,不如做一个image或者picturebox,设置它们的长宽,左右上下属性和你的frame一致,然后载入图片来的实在,而且省内存~~

Frame好像只能设置背景颜色,不能设置背景图片的。

同意楼上的,不能设图片背景


李沧区19777162579: VB frame背景图片问题 -
戎茅洛塞: 'frame本身不具备背景图片功能'以下是我用API做的一个例子'本来打算用LoadImage做,不过LoadPicture支持的图片格式多一点.'frame控件没有AutoRedraw属性,所以我在Form_Paint里加了一些代码,解决了最小化窗体后图片消失的问题....

李沧区19777162579: 在vb中要设置一幅图片为背景,但是图片不能全部显示,怎么才能解决这个问题??请各位高手帮帮!! -
戎茅洛塞: 可以先建一个图片框,设置成自动调整大小,把你要的图片加载进去,再用PaintPicture画上去,不过图片比例要一样,变形的话就不好看了,当然可以用paintpicture裁减下 Private Sub Form_Load() Form1.AutoRedraw = True Picture1.AutoSize = True Picture1.Picture = LoadPicture(图片路径) Form1.PaintPicture Picture1.Picture, 0, 0, Form1.ScaleWidth, Form1.ScaleHeight End Sub

李沧区19777162579: 为什么我用VB做的程序在载入背景图片时会错误?提示是:实时错误'75',路径/文件访问错误……我用 -
戎茅洛塞: e 必须包含:路径+文件名+扩展名,虽然你“载入一个文本,里面记录着文件路径”,但是这个路径是不是绝对路径,如果不是绝对路径,就会发生路径错误.

李沧区19777162579: vb6.0 如何让frame和option的背景色与image中图片的颜色一致? -
戎茅洛塞: 在Microsoft Forms 2.0控件组中的单选按钮可以透明,Frame可以用线框或Microsoft Forms 2.0中的Image来代替,不过它们不能作为容器控件.可以用图片框作Frame,在载入时把被它覆盖的窗口背景部分图像复制到图片框模仿透明效果.下面...

李沧区19777162579: VB窗体的背景图片如何改变? -
戎茅洛塞: from的picture属性改一下不就行了.也可以用代码如:form1.picture=loadpicture("c:\mypcture.jpg")

李沧区19777162579: VB中的窗体背景图片怎么设置才能和窗体大小统调相等 -
戎茅洛塞:假如要Form1,Form2尺寸一致,可以Private sub Form1_load()Form1.Hight=600Form1.Width=800 end subPrivate sub Form2_load() end sub

李沧区19777162579: 在vb窗体背景加载图片了怎么去掉? -
戎茅洛塞: 打开VB窗体空间,在它属性里面的图片属性清空,就可以了~ 或者你看看你的代码里面有没有这个函数 LoadPicture,改改吧~!

李沧区19777162579: vb中窗体的背景图片怎么设置 -
戎茅洛塞: 直接在窗体的Picture属性中设置.

李沧区19777162579: vb frame显示图片 -
戎茅洛塞: Private Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd ...

李沧区19777162579: vb 如何改变form的背景图片?
戎茅洛塞:vb很多空间不支持透明显示,甚至很多控件不支持背景图像. 对于支持背景图像的还好解决,你可以使用PictureClip控件,把form的背景赋给PictureClip ,然后读控件的坐标和大小,使用PictureClip 剪切你需要的部分赋给控件的背景. 如果控件不支持背景就麻烦多了.比如TEXT,只好使用很多API函数直接往控件的客户区写.这样还不如不用控件,完全自己写一个text

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网