作ってみました。円と菱形の当たり判定です。
#uselib "user32.dll"
#func InvalidateRect "InvalidateRect" int, int, int
#uselib "gdi32.dll"
#cfunc CreatePolygonRgn "CreatePolygonRgn" int, int, int
#cfunc CreateEllipticRgn "CreateEllipticRgn" int, int, int, int
#func FillRgn "FillRgn" int, int, int
#cfunc GetStockObject "GetStockObject" int
#func DeleteObject "DeleteObject" int
#cfunc CombineRgn "CombineRgn" int, int, int, int
#define BLACK_BRUSH 4 // 黒
repeat
redraw 0
color 255, 255, 255 : boxf
// 菱形のリージョンを作成
points = 100, 0, 0, 200, 100, 400, 200, 200
hRgn = CreatePolygonRgn(varptr(points), 4, 1)
// マウス位置に円形のリージョンを作成
hRgn2 = CreateEllipticRgn(mousex-50, mousey-50, mousex+50, mousey+50)
// リージョンを塗りつぶし
FillRgn hdc, hRgn, GetStockObject(BLACK_BRUSH)
FillRgn hdc, hRgn2, GetStockObject(BLACK_BRUSH)
// 当たり判定の結果(0と1以外は当たってる)
title ""+CombineRgn(hRgn, hRgn, hRgn2, 1)
DeleteObject hRgn
DeleteObject hRgn2
redraw 1
wait 1
loop