Private Type POINTAPI X As Long Y As Long End Type Private Type RECT Left As Long Top As Long Right As Long Bottom As Long End TypePrivate Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, _ ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, _ ByVal hRgn As Long, ByVal hBrush As Long) As Long Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, _ ByVal X As Long, ByVal Y As Long) As Long Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) _ As Long Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal _ hObject As Long) As Long Private Declare Function GetLastError Lib "kernel32" () As LongConst ALTERNATE = 1 Const WINDING = 2Dim hRgn As LongPrivate Sub Command1_Click() Dim xx(4) As POINTAPI Dim lB As Long Dim lOld As Long
'建立不规则区域 hRgn = CreatePolygonRgn(xx(0), 5, ALTERNATE) End Sub上面的代码建立了一个rgn句柄,然后你就可以通过ptInRegion来判断了。
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) Dim ap As POINTAPI
ap.X = X / 15: ap.Y = X / 15 '判断光标是否在区域内 If PtInRegion(hRgn, X / 15, Y / 15) Then Picture1.MousePointer = 2 Else Picture1.MousePointer = 0 End If End Sub上面的代码在光标移动时判断光标是否在区域中
帮助真大,有几个地方请教一下 1。ap。x=x、15是什么意思阿 2。winding=2和Dim lB As Long Dim lOld As Long什么意思呢 3。Picture1.MousePointer = 2 Picture1.MousePointer = 0两个数字的意义是? 为什么执行起来好像没什么作用?要把前面的declare做成模块吗?
创建多边形区域,再用ptInRegion判断,very easy!
判断图形是否存在槽或者悬臂的vb算法与源程序
我的想法是--将顶点信息存于数组(已完成),然后对取图形中的点来判断点与多边形的关系,然后通过点在多边形里还是外来判断是槽还是悬臂。
可否各位能讲讲具体的算法和源程序
各位能否具体讲一下编程。这样可能我更容易理解。谢谢啦
X As Long
Y As Long
End Type
Private Type RECT
Left As Long
Top As Long
Right As Long
Bottom As Long
End TypePrivate Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, _
ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function FillRgn Lib "gdi32" (ByVal hdc As Long, _
ByVal hRgn As Long, ByVal hBrush As Long) As Long
Private Declare Function PtInRegion Lib "gdi32" (ByVal hRgn As Long, _
ByVal X As Long, ByVal Y As Long) As Long
Private Declare Function CreateSolidBrush Lib "gdi32" (ByVal crColor As Long) _
As Long
Private Declare Function SelectObject Lib "gdi32" (ByVal hdc As Long, ByVal _
hObject As Long) As Long
Private Declare Function GetLastError Lib "kernel32" () As LongConst ALTERNATE = 1
Const WINDING = 2Dim hRgn As LongPrivate Sub Command1_Click()
Dim xx(4) As POINTAPI
Dim lB As Long
Dim lOld As Long
xx(0).X = 0: xx(0).Y = 0
xx(1).X = 50: xx(1).Y = 0
xx(2).X = 50: xx(2).Y = 50
xx(3).X = 0: xx(3).Y = 50
xx(4).X = 5: xx(4).Y = 25
'建立不规则区域
hRgn = CreatePolygonRgn(xx(0), 5, ALTERNATE)
End Sub上面的代码建立了一个rgn句柄,然后你就可以通过ptInRegion来判断了。
Dim ap As POINTAPI
ap.X = X / 15: ap.Y = X / 15
'判断光标是否在区域内
If PtInRegion(hRgn, X / 15, Y / 15) Then
Picture1.MousePointer = 2
Else
Picture1.MousePointer = 0
End If
End Sub上面的代码在光标移动时判断光标是否在区域中
1。ap。x=x、15是什么意思阿
2。winding=2和Dim lB As Long
Dim lOld As Long什么意思呢
3。Picture1.MousePointer = 2
Picture1.MousePointer = 0两个数字的意义是?
为什么执行起来好像没什么作用?要把前面的declare做成模块吗?
设定MousePoint的目的是为了光标移动到区域内可以变成十字形。
如何将无序的多边形顶点集合,排序成逆时针或者顺时针排序???
用什么具体的算法呢?
是否转化为二维数组的排列?具体怎么做呢?谢谢了。