Public Sub GlassifyForm(frm As Form)
Const RGN_DIFF = 4
Const RGN_OR = 2
Dim outer_rgn As Long
Dim inner_rgn As Long
Dim wid As Single
Dim hgt As Single
Dim border_width As Single
Dim title_height As Single
Dim ctl_left As Single
Dim ctl_top As Single
Dim ctl_right As Single
Dim ctl_bottom As Single
Dim control_rgn As Long
Dim combined_rgn As Long
Dim ctl As Control
If WindowState = vbMinimized Then Exit Sub
' Create the main form region.
wid = ScaleX(Width, vbTwips, vbPixels)
hgt = ScaleY(Height, vbTwips, vbPixels)
outer_rgn = CreateRectRgn(0, 0, wid, hgt)
border_width = (wid - ScaleWidth) / 2
title_height = hgt - border_width - ScaleHeight
inner_rgn = CreateRectRgn( _
border_width, _
title_height, _
wid - border_width, _
hgt - border_width)
' Subtract the inner region from the outer.
combined_rgn = CreateRectRgn(0, 0, 0, 0)
CombineRgn combined_rgn, outer_rgn, _
inner_rgn, RGN_DIFF
' Create the control regions.
For Each ctl In Controls
If ctl.Container Is frm Then
ctl_left = ScaleX(ctl.Left, frm.ScaleMode, _
vbPixels) _
+ border_width
ctl_top = ScaleX(ctl.Top, frm.ScaleMode, _
vbPixels) _
+ title_height
ctl_right = ScaleX(ctl.Width, frm.ScaleMode, _
vbPixels) _
+ ctl_left
ctl_bottom = ScaleX(ctl.Height, frm.ScaleMode, _
vbPixels) _
+ ctl_top
control_rgn = CreateRectRgn( _
ctl_left, ctl_top, _
ctl_right, ctl_bottom)
CombineRgn combined_rgn, combined_rgn, _
control_rgn, RGN_OR
End If
Next ctl
' Restrict the window to the region.
SetWindowRgn hWnd, combined_rgn, True
End Sub
|