以下代码为正解,能用..
问题是红色那几行看不懂,,在 CreatePolygonRgn(PolyPoint(0), num,1)明明只要1个PolyPoint坐标,为什么声明一个数组,再取其中一个点呢?但是我试过只放一个点进去,结果窗体没变化..   Public Structure POINTAPI
        Dim x As Integer
        Dim y As Integer
    End Structure
    '定义POINTAPI类型
    Declare Function CreatePolygonRgn Lib "gdi32" (ByRef lpPoint As POINTAPI, _
                                                   ByVal nCOUNT As Integer, _
                                                   ByVal nPolyFillMode As Integer) _
                                                   As Integer
    Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Integer, _
                                                ByVal hRgn As Integer, _
                                                ByVal bRedraw As Boolean) _
                                                As Integer
    Declare Function GetActiveWindow Lib "user32" () As Integer
    '声明API函数
        Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim i, FormPoly, num, myhwnd As Integer
        num = CInt(Me.TextBox1.Text)
        '将多边形的边数存入变量num       
 Dim PolyPoint(num) As POINTAPI
        For i = 0 To num - 1 Step 1
            PolyPoint(i).x = CInt(Int(Rnd() * 500))
            PolyPoint(i).y = CInt(Int(Rnd() * 500))

        Next
        '为多边形各点坐标随机赋值       
 FormPoly = CreatePolygonRgn(PolyPoint(0), num, 1)        myhwnd = GetActiveWindow()
        SetWindowRgn(myhwnd, FormPoly, False)