Option Explicit
Private Type POINTAPI
    X As Long
    Y As Long
End Type
Private Const PI As Single = 3.1415
Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long
Dim Ptg(9) As POINTAPI
Private Sub Command1_Click()
    Dim tri(2) As POINTAPI
    Dim a As Single, nA As Single
    Dim rA As Single, rB As Single
    Dim cX As Long, cY As Long
'    Dim Ptg(4) As POINTAPI      '改为声明模块级变量
    cX = Picture1.ScaleWidth / 2
    cY = Picture1.ScaleHeight / 2
    rA = cX / 2
    rB = rA * (Sin(18 * PI / 180) / Sin(126 * PI / 180))
    a = 36 * PI / 180
    
    tri(0).X = 0: tri(0).Y = -rA
    tri(1).X = -rB * Sin(a): tri(1).Y = -Cos(a) * rB
    tri(2).X = rB * Sin(a): tri(2).Y = -Cos(a) * rB
    
    Dim i As Integer, j As Integer
    Dim t(2) As POINTAPI
    Dim c(4) As Long
    c(0) = vbRed
    c(1) = vbBlue
    c(2) = vbYellow
    c(3) = vbGreen
    c(4) = RGB(255, 0, 255)     For i = 0 To 4
        nA = 2 * PI / 5 * i
        For j = 0 To 2
          t(j).X = tri(j).X * Cos(nA) + tri(j).Y * Sin(nA) + cX
          t(j).Y = -tri(j).X * Sin(nA) + tri(j).Y * Cos(nA) + cY
        Next j
        Ptg(i + 5) = t(0)   '加上这句
        Ptg(i) = t(1)
        drawPoly t, c(i)
    Next i
    drawPoly Ptg, vbWhite, 5
    Picture1.Refresh
End Sub
Private Sub drawPoly(p() As POINTAPI, Optional ByVal fillCol As Long, Optional ByVal nC As Long = 3)
    Picture1.FillStyle = 0
    Picture1.FillColor = fillCol
    Polygon Picture1.hdc, p(0), nC
End Sub
Private Sub Picture1_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single)
Dim i&
    Picture1.ToolTipText = ""
    For i = 5 To 9
        If (Abs(Ptg(i).X - X) < 5) Then
            If (Abs(Ptg(i).Y - Y < 5)) Then Picture1.ToolTipText = "这是第 " & i - 4 & " 个顶点": Exit Sub
        End If
    NextEnd Sub 
 

解决方案 »

  1.   

    Option Explicit '要求变量声明
    Private Type POINTAPI '定义一个POINT结构,因为重名,所以加 API
        X As Long 'x坐标
        Y As Long 'y坐标
    End Type '结束定义
    Private Const PI As Single = 3.1415 '圆周率常量
    Private Declare Function Polygon Lib "gdi32" (ByVal hdc As Long, lpPoint As POINTAPI, ByVal nCount As Long) As Long '申明API函数gdi32中的Polygon,填充多边形
    Dim Ptg(9) As POINTAPI '定义9个点
    Private Sub Command1_Click() '按钮1按下过程
        Dim tri(2) As POINTAPI '定义2个点
        Dim a As Single, nA As Single '定义2个变量
        Dim rA As Single, rB As Single '定义2个变量,表示凸点、凹点半径...
    三角函数lz学过么?
      

  2.   


    (0-rcosa, rsina)
    \
     \
      \
       (0,0)------(0,r)
                /
               /
              /
      

  3.   

    一点概念都没有,别人解释你也不懂。
    其实每句的注释装好VB,选择每个关键字,按f1都有。
      

  4.   

    一点概念都没有,别人解释你也不懂。 
    其实每句的注释装好MSDN,选择每个关键字,按f1都有。
      

  5.   

    我的上面没有 我没安装MSDN集合
      

  6.   

    给大胡子100分,让他给你个MSDN。
    lz什么也不会,又没有时间,这可难了!
      

  7.   

    这里面涉及数学(三角函数),涉及api,lz要想一下子明白,不可能,拿着用吧
      

  8.   

    这些代码要给你讲清楚了需要面对面地讲5小时以上
    因为前面要打基础,告诉你什么叫对象,什么叫控件,什么叫API,什么叫函数,什么叫变量....
      

  9.   

    lz,你的问题csdn解决不了,去北京四中网校看看吧。
      

  10.   

    你只要把 C 能够学到一般般,看懂那段 VB 代码应该没问题了。
    上课全走神去了吧~~~~~~
      

  11.   

      For i = 0 To 4 
            nA = 2 * PI / 5 * i 
            For j = 0 To 2 
              t(j).X = tri(j).X * Cos(nA) + tri(j).Y * Sin(nA) + cX 
              t(j).Y = -tri(j).X * Sin(nA) + tri(j).Y * Cos(nA) + cY 
            Next j 
            Ptg(i + 5) = t(0)  '加上这句 
            Ptg(i) = t(1) 
            drawPoly t, c(i) 
        Next i 
        drawPoly Ptg, vbWhite, 5 
        Picture1.Refresh 
    这句什么意思啊?
    谁能帮我注释下