More ... | ウインドウにスクロールバーを付けるウインドウにスクロールバーを付ける
始めにhttp://smile.poosan.net/perl-bin/hsp/ver3/hsp3.cgi?print+200511/05110003.txt スクロールバー追加モジュール// 2005/12/14修正済み (Ver0.96) #module "scrlbar" //----------------------- #uselib "user32" #func GetWindowLongA "GetWindowLongA" int,int #func SetWindowLongA "SetWindowLongA" int,int,int #func ShowScrollBar "ShowScrollBar" int,int,int #func SetScrollInfo "SetScrollInfo" int,int,var,int #func SetScrollPos "SetScrollPos" int,int,int,int #func SetWindowPos "SetWindowPos" int,int,int,int,int,int,int //----------------------- // 水平 垂直スクロールバーを使えるようにする #deffunc ScrollBar oncmd gosub *WMSIZE, 5 oncmd gosub *SCROLL, $114 oncmd gosub *SCROLL, $115 si= 28, 31, 0,0,0,0,0 // SCROLLINFO構造体 wx.ginfo_sel= ginfo_sizex+ginfo_sx-ginfo_winx wy.ginfo_sel= ginfo_sizey+ginfo_sy-ginfo_winy ; WS_VSCROLL|WS_HSCROLL|WS_SIZEBOX GetWindowLongA hwnd,-16 : SetWindowLongA hwnd,-16,stat|$340000 SetWindowPos hWnd, 0, 0, 0, 0, 0, $37 ; screen 0, bgscr用 return 1 *WMSIZE //ウィンドウサイズが変更された時の処理 sel=ginfo_sel: gsel ginfo_intid repeat 2 si.3= ginfo(26+cnt), ginfo(12+cnt), ginfo(8+cnt) SetScrollInfo hWnd, cnt, si, 1 loop groll ginfo_vx, ginfo_vy mref bm,67 : bm.20=ginfo_winx, ginfo_winy hHide= wx.ginfo_intid= ginfo_sizex ;gsel selを確実に実行させるため vHide= wy.ginfo_intid= ginfo_sizey wnd=hwnd : gsel sel ;何故かスクロールバーが描画されない環境があるため if hHide=1: ShowScrollBar wnd, 0, 0:else: SetWindowPos Wnd, 0,0,0,0,0,$37 if vHide=1: ShowScrollBar wnd, 1, 0:else: SetWindowPos Wnd, 0,0,0,0,0,$37 return 1 *SCROLL //スクロールバー操作時の処理 sel=ginfo_sel : gsel ginfo_intid m=iparam=$115 : nPos=ginfo(8+(m=1)) Code= wParam &$ffff repeat 1 if Code= 5 : nPos=wParam>>16&$ffff : break ;TB_THUMBTRACK if Code= 0 : nPos-4 : break ;TB_LINEUP if Code= 1 : nPos+4 : break if Code= 2 : nPos-32: break if Code= 3 : nPos+32 loop SetScrollPos hWnd, m, nPos, 1 if m : groll ginfo_vx, nPos :else: groll nPos, ginfo_vy gsel sel : return 1 #global ;----------------------- //StyleAdd ハンドル,スタイル,追加(0)or削除(1) (+2で 拡張ウィンドウスタイル) #uselib "user32.dll" #func global SetLong "SetWindowLongA" int, int, int #cfunc global GetLong "GetWindowLongA" int, int #define global StyleAdd(%1, %2=0, %3=0)ujw=((%3)&2)*-2-16 :\ SetLong %1, ujw, GetLong(%1, ujw)|(%2)^((%3)&1)*(%2) #define 拡張 2 #define 削除 1 ;----------------------- onexit gosub *owari screen 0 title "screen 0" picload dir_exe+"\\sample\\hspdx\\HSPDX.BMP" ScrollBar width 400, 300 screen 1 title "サイズ変更してみてください(^^)v" picload dir_exe+"/sample/demo/JP6GIRL.BMP" ScrollBar ; WS_MINIMIZEBOX, を削除(1) (+0 ウィンドウスタイル) StyleAdd hwnd, $20000, 1+0 gsel ginfo_sel, -1 : gsel ginfo_sel, 1 ScrollBar stop *owari if iparam|wparam=0:end wait 20:gsel wparam, -1:return |