ll_libload gdi, "gdi32.dll"
ll_getproc CreateSolidBrush, "CreateSolidBrush", gdi
ll_getproc DeleteObject, "DeleteObject", gdi
ll_getproc ExtFloodFill, "ExtFloodFill", gdi
ll_getproc SelectObject, "SelectObject", gdi
#module
#deffunc areaf int, int
mref x, 0 : mref y, 1
mref bmscr, 67
c = bmscr.40 // 現在のカレントカラーを退避
ll_callfunc c, 1, CreateSolidBrush@ : ll_ret hBrush
prm = bmscr.4, hBrush
ll_callfunc prm, 2, SelectObject@ : ll_ret i
pget x, y
prm = bmscr.4, x, y, rval + (gval << 8) + (bval << 16), 1
ll_callfunc prm, 5, ExtFloodFill@
prm = bmscr.4, i
ll_callfunc prm, 2, SelectObject@
ll_callfunc hBrsuh, 1, DeleteObject@
color c & 0xFF, c >> 8 & 0xFF, c >> 16 & 0xFF // 当初のカラーに戻す
return
#global
title "クリックで塗り潰し、右クリックでクリア"
randomize
button "変更", *init
onclick *click
*init
color
rnd i.0, winx : rnd i.1, winx
line i, -1, i.1, winy
rnd i.0, winy : rnd i.1, winy
line -1, i, winx, i.1
repeat 3 : rnd c.cnt, 256 : loop : color c, c.1, c.2
stop
*click
if iparam {
color 255, 255, 255 : boxf
goto *init
} else {
areaf mousex, mousey // クリックした座標の周り、同色を一括で塗り潰す
redraw
}
stop
|