形状不规则的窗体

来源:cww

这也是使用Region的观念,设定一个Region的范围,而後使用SetWindowRgn API,
这将使得该Window显示的范围只有在该Region之内,之外的区域全然没有办法显示

请先查Mouse是否处於不规则区域内

'需一个Command Button
Option Explicit
Const ALTERNATE = 1
Const WINDING = 2

Private Type POINTAPI
	X As Long
	Y As Long
End Type

Private Declare Function CreatePolygonRgn Lib "gdi32" (lpPoint As POINTAPI, ByVal nCount As Long, ByVal nPolyFillMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" (ByVal hWnd As Long, ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long
Private Declare Function DeleteObject Lib "gdi32" (ByVal hObject As Long) As Long

Private hRegion As Long

Private Sub Command1_Click()
Unload Me
End Sub

Private Sub Form_Load()
    Dim p(9) As POINTAPI
    p(0).X = 135: p(0).Y = 66
    p(1).X = 121: p(1).Y = 107
    p(2).X = 80: p(2).Y = 107
    p(3).X = 111: p(3).Y = 132
    p(4).X = 97: p(4).Y = 175
    p(5).X = 135: p(5).Y = 149
    p(6).X = 172: p(6).Y = 175
    p(7).X = 158: p(7).Y = 132
    p(8).X = 190: p(8).Y = 107
    p(9).X = 149: p(9).Y = 107
    hRegion = CreatePolygonRgn(p(0), 10, ALTERNATE)
    Me.Picture = LoadPicture("c:\windows\setup.bmp")
    Me.ScaleMode = 3
    Me.Move ScaleX(80, vbPixels, vbTwips), ScaleX(66, vbPixels, vbTwips), _
	ScaleX(200, vbPixels, vbTwips), ScaleX(180, vbPixels, vbTwips)
    Command1.Move 110, 80, 40, 40
    Command1.Caption = "Exit"
    Call SetWindowRgn(Me.hWnd, hRegion, True)
End Sub