Basic Univers
Global _Drawing, _MX, _MY, _MK, _DX, _DY
Macro MOU
_MX = WindowMouseX(0)
_MY = WindowMouseY(0)
_MK = Abs(GetAsyncKeyState_(#VK_LBUTTON) + GetAsyncKeyState_(#VK_RBUTTON)*2 + GetAsyncKeyState_(#VK_MBUTTON)*3)/$8000
_DX = DesktopMouseX()
_DY = DesktopMouseY()
If GetAsyncKeyState_(#VK_ESCAPE): End: EndIf
EndMacro
Procedure RubberBox(RGB, *Rubber.RECT)
BKG = CreateCompatibleDC_(_Drawing)
Wi = WindowWidth(EventWindow()): He = WindowHeight(EventWindow())
GetWindowRect_(WindowID(EventWindow()), @R.RECT)
Rim =(R\right - R\left - Wi) / 2
HiTitle = R\bottom - R\top - He - Rim
SelectObject_(BKG, CreateImage(0, Wi, He))
BitBlt_(BKG, 0, 0, Wi, He, _Drawing, 0, 0, #SRCCOPY)
x =_MX: y =_MY
lb.LOGBRUSH\lbStyle =#BS_SOLID
lb\lbColor = RGB
Repeat
EV = WindowEvent()
X1 = WindowMouseX(0): Y1 = WindowMouseY(0)
If X1 =- 1 : X1 =_DX - WindowX(0)- Rim : EndIf
If Y1 =- 1 : Y1 =_DY - WindowY(0)- HiTitle : EndIf
If X1<>xOld Or Y1 <>yOld
If x<>X1 Or y <>Y1
BitBlt_(_Drawing, 0, 0, Wi, He, BKG, 0, 0, #SRCCOPY)
SelectObject_(_Drawing, GetStockObject_(#NULL_BRUSH ))
Pen = ExtCreatePen_(#PS_COSMETIC| #PS_ALTERNATE, 1, @lb, 0, 0)
SelectObject_(_Drawing, Pen)
Rectangle_(_Drawing, x, y, X1, Y1)
xOld = X1: yOld = Y1
DeleteObject_(Pen)
EndIf
Else
Delay(20)
EndIf
Until GetAsyncKeyState_(#VK_LBUTTON)= 0
BitBlt_(_Drawing, 0, 0, Wi, He, BKG, 0, 0, #SRCCOPY)
DeleteDC_(BKG)
*Rubber.RECT\left = x:*Rubber\top = y:*Rubber\right = X1:*Rubber\bottom = Y1
FreeImage(0)
EndProcedure
hwnd = OpenWindow(0, 100, 100, 600, 400, "RubberBox", #WS_OVERLAPPEDWINDOW )
_Drawing = StartDrawing(WindowOutput(0))
Repeat
EV = WaitWindowEvent()
MOU
If EV =#WM_LBUTTONDOWN
RubberBox(#Red, @Rubber.RECT)
Box(Rubber\left, Rubber\top, Rubber\right - Rubber\left, Rubber\bottom - Rubber\top, Random($FFFFFF))
EndIf
Until EV = #PB_Event_CloseWindow