LOCAL frm
frm = CreateObject("Tform")
frm.Show(1)
* end of main
DEFINE CLASS Tform As Form
PROTECTED hRegion
Caption="Window Region"
Width=600
Height=350
BorderStyle=2
Backcolor=RGB(128,128,128)
AutoCenter=.T.
MaxButton=.F.
MinButton=.F.
hRegion=0
ADD OBJECT cmdOn As CommandButton WITH;
Left=30, Top=25, Width=120, Height=25,;
Caption="Set Region On"
ADD OBJECT cmdOn1 As CommandButton WITH;
Left=155, Top=25, Width=120, Height=25,;
Caption="Set Region On"
ADD OBJECT cmdOff As CommandButton WITH;
Left=30, Top=53, Width=120, Height=25,;
Caption="Set Region Off", Enabled=.F.
PROCEDURE Init
THIS.declare
PROCEDURE Destroy
THIS.RegionOff
PROCEDURE cmdOn.Click
ThisForm.RegionOn(0)
PROCEDURE cmdOn1.Click
ThisForm.RegionOn(1)
PROCEDURE cmdOff.Click
ThisForm.RegionOff
PROCEDURE RegionOn(nMode)
THIS.RegionOff
LOCAL nX, nY, nWidth, nHeight
nX = SYSMETRIC(10)+2
nY = SYSMETRIC(4) + SYSMETRIC(9)
nWidth=300
nHeight=150
IF nMode=0
THIS.hRegion = CreateRectRgn(nX, nY, nWidth, nHeight)
ELSE
THIS.hRegion = CreateRoundRectRgn(nX, nY,;
nWidth, nHeight, 50, 50)
ENDIF
IF THIS.hRegion = 0
ACTIVATE SCREEN
? "Failed to create region:", GetLastError()
ELSE
IF SetWindowRgn(THIS.HWnd, THIS.hRegion, 1) <> 0
THIS.cmdOff.Enabled=.T.
ENDIF
ENDIF
PROCEDURE RegionOff
* the system owns the region and deletes the handle
* when it is no longer needed
IF THIS.hRegion <> 0
IF SetWindowRgn(THIS.HWnd, 0, 1) <> 0
THIS.hRegion=0
THIS.cmdOff.Enabled=.F.
ENDIF
ENDIF
PROCEDURE declare
DECLARE INTEGER GetLastError IN kernel32
DECLARE INTEGER GetFocus IN user32
DECLARE INTEGER CreateRectRgn IN gdi32;
INTEGER nLeftRect, INTEGER nTopRect,;
INTEGER nRightRect, INTEGER nBottomRect
DECLARE INTEGER CreateRoundRectRgn IN gdi32;
INTEGER nLeftRect, INTEGER nTopRect,;
INTEGER nRightRect, INTEGER nBottomRect,;
INTEGER nWidthEllipse, INTEGER nHeightEllipse
DECLARE INTEGER SetWindowRgn IN user32;
INTEGER hWnd, INTEGER hRgn, SHORT bRedraw
ENDDEFINE
|