说明下方法(代码以后可以贴下):
在窗体出现前用BitBlt将屏幕图片贴在一个PictureBox控件, 再半透明地贴到Form里, 差不多是这样的了
在窗体出现前用BitBlt将屏幕图片贴在一个PictureBox控件, 再半透明地贴到Form里, 差不多是这样的了
解决方案 »
- 为何VB调用存储过程不能把结果插入临时表,而SQL 2000 查询分析器中可以?
- 帮忙算一下这道题的答案~~~~~`
- 用VB+SQL server2000做的企业人事信息管理系统 有偿求助
- 新手上路-----高手指点一下!经常逛VB者UP一下!
- 请问在VB中如何编程序备份和恢复Access数据库
- 论坛里有 HID USB 免驱动设备通信的朋友吗?
- 关于报表的横向问题,急!
- 请教大家一个sql语句的问题
- uguess(uguess)如果你把你的联系方式告诉我的话我再给你58分,如果不好说的话就mailto [email protected]
- 大送分(之四),前三位每人80,快来抢分!!!!!!!!!
- !!!请大家看一下,这个存储过程为何不返回记录集?
- 请文这样的文本输入如何实现100分
MS 在自己的系统里都没实现,所以在98下很难!还是找2K吧。
Private Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Private Declare Function SetLayeredWindowAttributes Lib "user32" (ByVal hwnd As Long, ByVal crKey As Long, ByVal bAlpha As Byte, ByVal dwFlags As Long) As Long
Private Const WS_EX_LAYERED = &H80000
Private Const GWL_EXSTYLE = (-20)
Private Const LWA_ALPHA = &H2
Private Const LWA_COLORKEY = &H1Private Sub Command1_Click()
Dim i As Byte
Dim rtn As Long
i = 128
rtn = GetWindowLong(hwnd, GWL_EXSTYLE)
rtn = rtn Or WS_EX_LAYERED
SetWindowLong me.hwnd, GWL_EXSTYLE, rtn
SetLayeredWindowAttributes me.hwnd, 0, i, LWA_ALPHA'i决定透明度
'当i=0时窗口全透明,i=128时窗口半透明,i=255时窗口不透明
End Sub
点击窗体即变透明'首先要将form的borderstyle设为0Sub ShowTransparency(cSrc As PictureBox, cDest As PictureBox, _
ByVal nLevel As Byte)
Dim LrProps As rBlendProps
Dim LnBlendPtr As Long
'cDest.Cls
LrProps.tBlendAmount = nLevel
CopyMemory LnBlendPtr, LrProps, 4
With cSrc
AlphaBlend cDest.hdc, 0, 0, .ScaleWidth, .ScaleHeight, _
.hdc, 0, 0, .ScaleWidth, .ScaleHeight, LnBlendPtr
End With
cDest.Refresh
End SubPrivate Sub Command1_Click()
'将窗体存为位图
Picture1.Width = Me.Width
Picture1.Height = Me.Height
BitBlt Picture1.hdc, 0, 0, Me.Width, Me.Height, Me.hdc, 0, 0, vbSrcCopy
Picture1.Refresh
'获得窗体背后的图象
Picture3.Width = Me.Width
Picture3.Height = Me.Height
BitBlt Picture3.hdc, 0, 0, Me.Width / Screen.TwipsPerPixelX, Me.Height / Screen.TwipsPerPixelY, Picture2.hdc, Me.Left / Screen.TwipsPerPixelX, Me.Top / Screen.TwipsPerPixelY, vbSrcCopy
Picture3.Refresh
'透明化
ShowTransparency Picture3, Picture1, 100
End SubPrivate Sub Form_Load()
Picture1.Visible = True
Picture1.AutoRedraw = True
Picture1.BorderStyle = 0
Picture1.Appearance = 0
Picture1.Top = 0
Picture1.Left = 0
Picture2.Visible = False
Picture2.AutoRedraw = True
Picture2.Appearance = 0
Picture2.BorderStyle = 0
Picture3.Visible = False
Picture3.AutoRedraw = True
Picture3.BorderStyle = 0
Picture3.Appearance = 0
Dim DeskHdc&, Ret& ' 首先先捕获桌面
DeskHdc = GetDC(0)
Picture2.Width = Screen.Width
Picture2.Height = Screen.Height
BitBlt Picture2.hdc, 0, 0, Picture2.Width / Screen.TwipsPerPixelX, Picture2.Height / Screen.TwipsPerPixelY, DeskHdc, 0, 0, vbSrcCopy
Ret = ReleaseDC(0&, DeskHdc)
Picture2.Refresh
End Sub下面copy在模块中
Public Type rBlendProps
tBlendOp As Byte
tBlendOptions As Byte
tBlendAmount As Byte
tAlphaType As Byte
End TypePublic Declare Function AlphaBlend Lib "msimg32" (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 widthSrc As Long, _
ByVal heightSrc As Long, ByVal blendFunct As Long) As BooleanPublic Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
(Destination As Any, Source As Any, ByVal Length As Long)Public 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
Public Declare Function GetDC Lib "user32" (ByVal hwnd As Long) As Long
Public Declare Function ReleaseDC Lib "user32" (ByVal hwnd As Long, ByVal hdc As Long) As Long
Public Const SRCCOPY = &HCC0020
可以实现背景是静态的半透明
动态的无法实现其实微软都没有把Win98下的半透明编出来
大家都知道,拖动文件的时候,文件的图标是半透明的
如果你把桌面背景设为一动态Gif,再拖动桌面的图标,你会发现桌面背景的那幅动态Gif停止运动了