创建画刷是CreateHatchBrush(m_FillStyle, m_FillColor)
创建画笔是CreatePen(m_BorderStytle, m_BorderWidth, m_BorderColor)
我的区域需要一个虚线的边界,但是区域只能用画刷描绘边界。怎么才能用画笔来描绘区域的边界?
FrameRgn函数是用画刷描绘区域,用FillRgn来填充区域。如何创建一个和画笔风格一样的画刷?让区域看上去象画笔描绘的?我需要一个Dot模式的画刷,怎么做?
请指教!
非常感谢!
创建画笔是CreatePen(m_BorderStytle, m_BorderWidth, m_BorderColor)
我的区域需要一个虚线的边界,但是区域只能用画刷描绘边界。怎么才能用画笔来描绘区域的边界?
FrameRgn函数是用画刷描绘区域,用FillRgn来填充区域。如何创建一个和画笔风格一样的画刷?让区域看上去象画笔描绘的?我需要一个Dot模式的画刷,怎么做?
请指教!
非常感谢!
适合画长方形,但不适合画圆等不规则形状。
不过,你描绘区域的边界有什么用吗?Option ExplicitPrivate Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function FrameRgn Lib "gdi32" (ByVal hdc As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hdc As Long, ByVal crColor As Long) As LongPrivate Sub Form_Paint()
Dim ptnBmp As Long, ptnBrush As Long
Dim ptnData(3&) As Long
Dim tmpRgn As Long
ptnData(0&) = &HF00FF00F
ptnData(1&) = &HF00FF00F
ptnData(2&) = &HFF00FF0
ptnData(3&) = &HFF00FF0
ptnBmp = CreateBitmap(8&, 8&, 1&, 1&, ptnData(0&))
If ptnBmp Then
ptnBrush = CreatePatternBrush(ptnBmp)
If ptnBrush Then
tmpRgn = CreateRectRgn(10&, 10&, 39&, 39&)
If tmpRgn Then
SetTextColor Me.hdc, vbBlue
FrameRgn Me.hdc, tmpRgn, ptnBrush, 1&, 1&
DeleteObject tmpRgn
End If
DeleteObject ptnBrush
End If
DeleteObject ptnBmp
End If
End Sub'VB6 + WinME -> OK
Private Declare Function CreateRectRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long'以下函数是 FrameRegionDot 所需要的。
Private Declare Function CreatePatternBrush Lib "gdi32" (ByVal hBitmap As Long) As Long
Private Declare Function FrameRgn Lib "gdi32" (ByVal hDC As Long, ByVal hRgn As Long, ByVal hBrush As Long, ByVal nWidth As Long, ByVal nHeight As Long) As Long
Private Declare Function CreateBitmap Lib "gdi32" (ByVal nWidth As Long, ByVal nHeight As Long, ByVal nPlanes As Long, ByVal nBitCount As Long, lpBits As Any) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long
Private Declare Function SetTextColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function SetBkColor Lib "gdi32" (ByVal hDC As Long, ByVal crColor As Long) As Long
Private Declare Function SetROP2 Lib "gdi32" (ByVal hDC As Long, ByVal nDrawMode As Long) As Long
Private Declare Function GetROP2 Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function GetTextColor Lib "gdi32" (ByVal hDC As Long) As Long
Private Declare Function GetBkColor Lib "gdi32" (ByVal hDC As Long) As Long'一段演示程序。不是描绘区域边框所需要的。可以删除。
Private Sub Form_Paint()
Dim tmpRgn As Long
tmpRgn = CreateRectRgn(10&, 10&, 39&, 39&)
If tmpRgn Then
FrameRegionDot Me.hDC, tmpRgn, vbRed, True
DeleteObject tmpRgn
End If
tmpRgn = CreateRectRgn(30&, 30&, 69&, 69&)
If tmpRgn Then
FrameRegionDot Me.hDC, tmpRgn, vbYellow, False
DeleteObject tmpRgn
End If
tmpRgn = CreateEllipticRgn(10&, 80&, 110&, 110&)
If tmpRgn Then
FrameRegionDot Me.hDC, tmpRgn, vbGreen, False
DeleteObject tmpRgn
End If
End Sub'以点的方式描绘区域边框的函数,适合于描绘正方形等规则区域。
'参数 解释
'hDC 边框描绘到的设备场景
'hRgn 需要描绘的区域
'lColor 描绘的边框的颜色
'bThick 是否以粗线来描绘(True:用粗线,2px False:用细线,1px)(可选的)
Sub FrameRegionDot(ByVal hDC As Long, ByVal hRgn As Long, ByVal lColor As Long, Optional ByVal bThick As Boolean)
Dim ptnBmp As Long, ptnBrush As Long
Dim ptnData(3&) As Long, lLen As Long
Dim oTc As Long, oBc As Long, oRop As Long
oTc = GetTextColor(hDC): oBc = GetBkColor(hDC): oRop = GetROP2(hDC)
If bThick Then lLen = 2& Else lLen = 1&
ptnData(0&) = &HF00FF00F
ptnData(1&) = &HF00FF00F
ptnData(2&) = &HFF00FF0
ptnData(3&) = &HFF00FF0
ptnBmp = CreateBitmap(8&, 8&, 1&, 1&, ptnData(0&))
If ptnBmp Then
ptnBrush = CreatePatternBrush(ptnBmp)
If ptnBrush Then
SetTextColor hDC, vbBlack
SetBkColor hDC, vbWhite
SetROP2 hDC, vbMaskPen
FrameRgn hDC, hRgn, ptnBrush, lLen, lLen
SetTextColor hDC, lColor
SetBkColor hDC, vbBlack
SetROP2 hDC, vbMergePen
FrameRgn hDC, hRgn, ptnBrush, lLen, lLen
DeleteObject ptnBrush
End If
DeleteObject ptnBmp
SetTextColor hDC, oTc: SetBkColor hDC, oBc: SetROP2 hDC, oRop
End If
End Sub