NB.*borderless forms demo
NB.
NB. INSTALL
NB.    > copy borderless.ijs user
NB.
NB. RUN
NB.    load 'user\borderless.ijs'
NB.
NB. RUN (alternative)
NB.    open 'user\borderless.ijs'
NB.    [Ctrl+W]
NB.
NB. 04/2003 Oleg Kobchenko <olegykj@yahoo.com>
NB. 08/2006 Oleg Kobchenko - for j601

require 'dll gl2 convert'

coclass 'pborderless'

PBORDERLESS=: 0 : 0
pc borderless nomax nomenu nomin nosize; pn "J - Zoomin";
xywh 0 0 100 100;cc g1 isigraph rightmove bottommove;
pas 0 0;
rem form end;
)

create=: 3 : 0
  coinsert'jgl2'
  CAPTURE=: ''
  XYWH=: 0 0 200 200
  STARTXY=: 0 0
  P1=: 3 3,164 3,164 16,3 16,3 3
  P2=: 60 30,150 30,150 66,134 66,134 140,110 176,40 176,12 150,12 102,60 102,60 30
  wd PBORDERLESS
  formhwnd=: ".wd'qhwndp'
  framehwnd=: Parent formhwnd
  (WS_DLGFRAME XOR WS_BORDER XOR WindowStyle framehwnd) WindowStyle framehwnd
  (WS_EX_CLIENTEDGE XOR WindowStyleEx formhwnd) WindowStyleEx formhwnd
  (PolyPolygonRgn P1;P2) WindowRgn framehwnd
  wd 'pmovex 200 200 200 200'
  wd 'pshow;'
)

destroy=: 3 : 0
  wd'pclose'
  codestroy''
)

borderless_cancel=: borderless_close=: destroy

borderless_g1_paint=: 3 : 0
  XYWH=: ".wd'qchildxywhx g1'
  glsel'g1'
  glclear''
  glbrush ] glrgb 255 127 0
  glpolygon P1
  glpolygon P2
  glfont 'System 9'
  gltextxy 8 1
  gltext 'borderless'
  glfont '"Bookman Old Style" 140 bold'
  gltextxy 20 _10
  gltext 'J'
)

borderless_g1_mbldown=: 3 : 0
  'x y w h'=. 4{.".sysdata
  STARTXY=: -x,y
  glcapture CAPTURE=: 7,XYWH
)

borderless_g1_mblup=: 3 : 0
  if. 0=#CAPTURE do. return. end.
  CAPTURE=: ''
  glcapture 0
  'x y w h'=. 4{.".sysdata
  MOVEXY=. x,y
  'x y w h'=. ".wd'qformx'
  wd 'pmovex ',":(MOVEXY+STARTXY+x,y),w,h
  wd 'setinvalid g1'
)

NB. ===================================================================[ W*n32 ]===

NB.*Parent v   parenthwnd=. Parent hwnd
Parent=: 3 : '>{.''user32 GetParent i i'' cd <y'

WS=. 'WS_POPUP WS_CHILD WS_MINIMIZE WS_VISIBLE WS_DISABLED WS_CLIPSIBLINGS '
WS=. WS,'WS_CLIPCHILDREN WS_MAXIMIZE WS_BORDER WS_DLGFRAME WS_VSCROLL WS_HSCROLL '
WS=. WS,'WS_SYSMENU WS_THICKFRAME WS_GROUP WS_TABSTOP'
(WS)=: (_2 ic(0 0 0 128{a.)),|.2<.@^16+i.15

NB.*WindowStyle v  oldstyle=. [newstyle] WindowStyle hwnd
NB.  e.g. (WS_BORDER XOR WindowStyle hwnd) WindowStyle hwnd
WindowStyle=: 3 : 0
  >{.'user32 GetWindowLongA i i i' cd y;_16
  :
  >{.'user32 SetWindowLongA i i i i' cd y;_16;x
)

WS_EX_CLIENTEDGE=: 16b00000200

NB.*WindowStyleEx v  oldstyle=. [newstyle] WindowStyleEx hwnd
WindowStyleEx=: 3 : 0
  >{.'user32 GetWindowLongA i i i' cd y;_20
  :
  >{.'user32 SetWindowLongA i i i i' cd y;_20;x
)

NB.*WindowRgn v  oldrgn=. [newrgn] WindowRgn hwnd
NB.   e.g. (PolyPolygonRgn P1;P2) WindowRgn hwnd
WindowRgn=: 3 : 0
  r=. >{.'user32 CreateRectRgn i i i i i' cd y;0;0;0;0
  >{.'user32 GetWindowRgn i i i' cd y;r
  :
  >{.'user32 SetWindowRgn i i i i' cd y;x;1
)

NB.*PolyPolygonRgn v   PolyPolygonRgn p1;p2;...;pN
PolyPolygonRgn=: 3 : 0
  r=. <.-: #&> ,boxopen y
  >{.'gdi32 CreatePolyPolygonRgn i *i *i i i' cd (;y);r;(#r);1
)


NB. =========================================================
cocurrent<'base'
''conew'pborderless'