窗口形状任意建

软件世界

一个好的应用程序一定会有一个好的界面,如果能设计一个不规则的任意形状的窗口是不是很有创意呢,其实在VB 中用几行代码就可以实现,这似乎不可思议。但事实就是如此!请试试:
Private Declare Function CreateEllipticRgn Lib "gdi32" (ByVal X1 As Long, ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 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 Sub Form_Load()
Show 'The form!
SetWindowRgn hWnd,CreateEllipticRgn(0, 0, 300, 200), True
End Sub
上述代码就创建了一个椭圆形状的窗口。怎么样,简单吧?常用的区域创建函数有:
1.CreateEllipticRgn '创建一个椭圆或圆形区域
2.CreateRoundRectRgn '创建一个圆角矩形区域
3.CreatePolygonRgn '创建一个由一系列点围成的区域
4.CombineRgn '将两个区域组合为一个新区域
5.SetWindowRgn '设置新的窗口区域。
通过CombineRgn可以取两个区域的并集、交集等组合,从而创建出复杂形状的窗体。
下面程序就可以得到的窗体是两个相连的月牙形:
Option Explicit
'API声明
Private Declare Function CreateEllipticRgn Lib "gdi32" _
(ByVal x1 As Long, ByVal Y1 As Long, _
ByVal x2 As Long, ByVal Y2 As Long) As Long
Private Declare Function CombineRgn Lib "gdi32" _
(ByVal hDestRgn As Long, ByVal hSrcRgn1 As Long, _
ByVal hSrcRgn2 As Long, ByVal nCombineMode As Long) As Long
Private Declare Function SetWindowRgn Lib "user32" _
(ByVal hWnd As Long, ByVal hRgn As Long, _
ByVal bRedraw As Boolean) As Long
'常数声明
Const RGN_XOR = 3
Private Sub Form_Load()
Dim x1, x2
x1 = CreateEllipticRgn(100, 100, 400, 400)
x2 = CreateEllipticRgn(200, 100, 500, 400)
CombineRgn x1, x1, x2, RGN_XOR
SetWindowRgn hWnd, x1, 1
End Sub