读书人

多边形窗口API的有关问题

发布时间: 2012-01-19 20:57:58 作者: rapoo

多边形窗口API的问题
以下代码为正解,能用..
问题是红色那几行看不懂,,在 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)

[解决办法]

引用于API中文手册:
【VB声明】
Private Declare Function CreatePolygonRgn Lib "gdi32" Alias "CreatePolygonRgn" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

【说明】
创建一个由一系列点围成的区域。windows在需要时自动将最后点与第一点相连以封闭多边形

【返回值】
Long,执行成功为创建的区域句柄,失败则为0

【备注】
不用时一定要用DeleteObject函数删除该区域

【参数表】
lpPoint -------- POINTAPI,nCount个POINTAPI结构中的第一个POINTAPI结构

nCount --------- Long,多边形的点数

nPolyFillMode -- Long,描述多边形填充模式。可为ALTERNATE 或 WINDING常数。参考SetPolyFillMode函数对多边形填充模式的解释

[解决办法]
探讨
引用于API中文手册:
【VB声明】
  Private Declare Function CreatePolygonRgn Lib "gdi32" Alias "CreatePolygonRgn" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long

【说明】
  创建一个由一系列点围成的区域。windows在需要时自动将最后点与第一点相连以封闭多边形

【返回值】
  Long,执行成功为创建的区域句柄,失败则为0

【备注】
  不用时一定要用DeleteObject函数删除该区域

【参数表】
  lpPoint --------  POINTAPI,nCount个POINTAPI结构中的第一个POINTAPI结构

  nCount ---------  Long,多边形的点数

  nPolyFillMode --  Long,描述多边形填充模式。可为ALTERNATE 或 WINDING常数。参考SetPolyFillMode函数对多边形填充模式的解释

这下明白了吧.

读书人网 >VB

热点推荐