一个简单问题:如何在一幅图片上绘制一个可拖动的半透明矩形?
就像Windows桌面那种可拖动的半透明矩形效果。
关键是半透明矩形如何绘制?
问题点数:80、回复次数:4Top
1 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 10:09:07 得分 0
我是想用来在图片上方覆盖一层半透明的矩形用于遮盖,用于拖动矩形框来改变矩形大小。应该要使用GDI绘图吧?Top
2 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 10:10:09 得分 0
UPTop
3 楼chewinggum(口香糖·个人二五计划第一年)回复于 2005-12-28 14:21:24 得分 80
中无闲来无事做了个简单实现给你
新建一个窗体,放一个picture1,在picture1里面再放一个picture2,然后粘贴下面的代码。picture里面最好放一张图用作为比较用。
目前这段代码在鼠标超出picture1范围和拖动picture2超出picture1范围的时候有点问题,需要在AlphaBlend的时候判断pciture2是否超出picture1。但是现在上班时间到了,没时间继续完善代码了,楼主自行完善吧
Option Explicit
Private Declare Function AlphaBlend Lib "msimg32.dll" (ByVal hdcDest As Long, ByVal nXOriginDest As Long, ByVal nYOriginDest As Long, ByVal nWidthDest As Long, ByVal hHeightDest As Long, ByVal hdcSrc As Long, ByVal nXOriginSrc As Long, ByVal nYOriginSrc As Long, ByVal nWidthSrc As Long, ByVal nHeightSrc As Long, ByVal blendFunction As Long) As Long
Dim blnMouseDown As Boolean
Dim blnDrag As Boolean
Dim CurX As Single
Dim CurY As Single
Dim DX As Single
Dim DY As Single
Private Sub Form_Load()
Picture2.Visible = False
Picture2.BorderStyle = 0
Picture2.BackColor = vbBlue
Picture1.ScaleMode = 3
Picture2.ScaleMode = 3
Me.ScaleMode = 3
End Sub
Private Sub Picture1_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnMouseDown = True
CurX = X
CurY = Y
Picture1.Refresh
Picture2.Left = X
Picture2.Top = Y
Picture2.Width = 0
Picture2.Height = 0
Picture2.Visible = True
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
If blnMouseDown Then
Picture2.Width = Abs(X - CurX)
Picture2.Height = Abs(Y - CurY)
If X < CurX Then
Picture2.Left = X
End If
If Y < CurY Then
Picture2.Top = Y
End If
Picture2.Refresh
AlphaBlend Picture2.hDC, 0, 0, Picture2.Width, Picture2.Height, _
Picture1.hDC, Picture2.Left, Picture2.Top, Picture2.Width, Picture2.Height, 100 * &H10000
End If
End Sub
Private Sub Picture1_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
blnMouseDown = False
End Sub
Private Sub Picture2_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
DX = X
DY = Y
blnDrag = True
End Sub
Private Sub Picture2_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
Picture2.Left = Picture2.Left + X - DX
Picture2.Top = Picture2.Top + Y - DY
Picture2.Refresh
AlphaBlend Picture2.hDC, 0, 0, Picture2.Width, Picture2.Height, _
Picture1.hDC, Picture2.Left, Picture2.Top, Picture2.Width, Picture2.Height, 100 * &H10000
blnDrag = False
End Sub
Top
4 楼BBB2005(最近在写一个类Word图文编辑器)回复于 2005-12-28 15:14:44 得分 0
感谢chewinggum(口香糖·把减肥列入下一个五年计划)
另外,Picture1的AutoRedraw需要设置为True才行。
Top




