HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2014
0220
冨山ウィンドウをくっつけたい2解決


冨山

リンク

2014/2/20(Thu) 16:28:54|NO.60140

ウィンドウをくっつけたいのですが、調べても出てこず、わかりませんでした。

一つのウィンドウがドラッグで動くのにほかのウィンドウも同期して動くようにしたいのですが方法がありましたらおねがいします



この記事に返信する


FunnyMaker

リンク

2014/2/20(Thu) 18:34:02|NO.60149

ウィンドウの座標を監視して、変化があったら即「くっつけ」る方法があります。

こんな感じです。


; ※今回は分かりやすくするために配列変数を用いませんでしたが、 ; 実戦では配列変数とかうまく使って汎用化すべきです。(特に条件設定の辺り) ; (ウィンドウが2枚以上になっても対応できるようにする為に。) *INIT ;< ウィンドウメッセージ定数 > #define WM_MOVE 3 ;< WinAPI > #uselib "user32.dll" #func MoveWindow "MoveWindow" int ,int,int ,int,int ,int #cfunc GetSystemMetrics "GetSystemMetrics" int #define SM_CYCAPTION $00000004 #define SM_CXFIXEDFRAME $00000007 #define SM_CYFIXEDFRAME $00000008 ;< 環境情報取得 > height_caption = GetSystemMetrics(SM_CYCAPTION) ;タイトルバーの高さ width_vframe = GetSystemMetrics(SM_CXFIXEDFRAME) ;垂直枠の幅 height_hframe = GetSystemMetrics(SM_CYFIXEDFRAME) ;水平枠の幅 ;< 条件設定 > ;ウィンドウ1の大きさ #define sizex_window1 400 #define sizey_window1 200 ;ウィンドウ2の大きさ #define sizex_window2 300 #define sizey_window2 100 ;ウィンドウ2の同1に対する希望相対座標 (好みにカスタマイズしよう) #define x_RelativeCoordinate_2to1 0 y_RelativeCoordinate_2to1 = sizey_window1 + height_caption+height_hframe *SETUP ;window1 screen 0,sizex_window1,sizey_window1 color 0,128,192 : boxf font msgothic,50,1+2+16 color 255,255,255 pos 10,10 : mes "window 1" redraw ;(∵イタリック体の欠け防止) hwnd_window1 = hwnd ;ウィンドウハンドルを取得しておく。(後で使う) oncmd gosub *FOLLOW ,WM_MOVE ;「WM_MOVE」(=3) を受け取ったら *FOLLOW へサブルーチンジャンプ ;window2 screen 1,sizex_window2,sizey_window2 color 255,128,64 : boxf font msgothic,50,1+2+16 color 255,255,255 pos 10,10 : mes "window 2" redraw hwnd_window2 = hwnd oncmd gosub *FOLLOW ,WM_MOVE gosub *FOLLOW ;最初の1回 *MAIN_1 stop *FOLLOW ;ウィンドウの位置を取得 gsel 0 : pos_window1 = ginfo_wx1 ,ginfo_wy1 gsel 1 : pos_window2 = ginfo_wx1 ,ginfo_wy1 if (pos_window2(0) ! pos_window1(0) + x_RelativeCoordinate_2to1)|(pos_window2(1) ! pos_window1(1) + y_RelativeCoordinate_2to1) { k = ginfo_act if k = 0 { ;gsel 1 ;width , ,pos_window1(0) + x_RelativeCoordinate_2to1 ,pos_window1(1) + y_RelativeCoordinate_2to1 ;↑「width」命令ではマイナスの座標を渡すと無視されてしまうので、代わりにWinAPIの「MoveWindow」関数を使うことにします。(書式はMSDNで調べる) MoveWindow hwnd_window2 ,pos_window1(0) + x_RelativeCoordinate_2to1 ,pos_window1(1) + y_RelativeCoordinate_2to1 ,sizex_window2+width_vframe*2 ,sizey_window2+height_caption+height_hframe ,1 ;HSPのwidth命令と違って、ウィンドウのサイズ指定ではwindowsが勝手に付ける装飾も考慮する必要がある。 } if k = 1 { ;gsel 0 ;width , ,pos_window2(0) - x_RelativeCoordinate_2to1 ,pos_window2(1) - y_RelativeCoordinate_2to1 MoveWindow hwnd_window1 ,pos_window2(0) - x_RelativeCoordinate_2to1 ,pos_window2(1) - y_RelativeCoordinate_2to1 ,sizex_window1+width_vframe*2,sizey_window1+height_caption+height_hframe ,1 } ;if k = …… { ;(ウィンドウが複数ある場合は...) ;} } return



冨山

リンク

2014/4/2(Wed) 19:11:23|NO.61255

ありがとうございました



ONION software Copyright 1997-2023(c) All rights reserved.