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


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0325
CEOウィンドウの最大サイズについて2解決


CEO

リンク

2010/3/25(Thu) 09:39:29|NO.31552

どうしてもわからなかったので質問します。
現在、画像ビューアを作成していて、
画像をドラッグすると表示位置を移動できるようにしたのですが、
以下のスクリプトの場合、画像がディスプレイサイズより大きいと
最後まで移動できません。

最大サイズを無駄に必要以上に大きくしたくありませんし、
screenでの再初期化はなるべくやりたくないのですが、
どうにかして最後まで移動できないでしょうか?


/////////インクルード #include "hspcv.as" #include "user32.as" #define default_xsize 640;初期Xサイズ #define default_ysize 480;初期Yサイズ ///////////モジュール #module #deffunc reset_var onexit;変数を初期化します dim x@ : dim y@ : dim mx@ : dim my@ : dim key@ dim xs:dim ys dim xsize@:dim ysize@ sdim filename@,1 return #global ///////////モジュールにより変数初期化 reset_var /////////ウィンドウ作成 screen 0,ginfo(20),ginfo(21),2 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | $10000 | $40000;最大化を有効にしてやる oncmd gosub*WM_MINMAXINFO,$00000024;MINMAXINFO使用 width default_xsize,default_ysize /////////on系命令 onexit gosub*exit ///////////////////////ファイルロード dialog "jpg",16,"画像ファイル" if stat=0 : end sdim filename,256;領域確保 filename=refstr //////////////////////CV側でロード exist filename;ファイルの有無を確認 if strsize=-1 : end cvload filename,0;ロード if stat!0 : end ////////////////////////画像サイズ取得 cvgetinfo xsize,0, CVOBJ_INFO_SIZEX cvgetinfo ysize,0, CVOBJ_INFO_SIZEY redraw 0 syscolor 15 : boxf;塗りつぶし cvgetimg 0;表示 redraw 1 gsel 0,1;ウィンドウ表示 repeat stick key,$300;キー取得 if key&$100 { x=ginfo_vx : y=ginfo_vy;描画地点を保存 mx = ginfo_mx : my = ginfo_my;マウス位置を保存 gosub *move_picture } wait 1 loop stop *move_picture ////ドラッグで移動されたときに飛んできます repeat stick key,$300;キー取得 if (key&$100)=0 : break groll x+(mx-ginfo_mx),y+(my-ginfo_my);移動 xs=ginfo_vx+ginfo(12):ys=ginfo_vy+ginfo(13) title ""+xs+"/"+ys+"" wait 1 loop return *exit ///onexitを無効化 onexit 0 ///マクロ取り消し #undef default_xsize #undef default_ysize ///終了 end *WM_MINMAXINFO dim MINMAXINFO,9 dupptr MINMAXINFO,lparam,4*2*5,4 if xsize>ginfo(26)|ysize>ginfo(27):{;もしも、画像サイズが初期化サイズより大きかったら MINMAXINFO.8=xsize MINMAXINFO.9=ysize }else:{;そうでなかったら MINMAXINFO.8=ginfo(20) MINMAXINFO.9=ginfo(21) } return 0



この記事に返信する


エイジ

リンク

2010/3/25(Thu) 19:08:31|NO.31568

>最大サイズを無駄に必要以上に大きくしたくありませんし、
>screenでの再初期化はなるべくやりたくないのですが、
画像サイズと同じだけのビットマップを確保する必要があるので、基本的にウィンドウの初期化をしないとムリ。
cvgetimgには自動的に初期化してくれる機能があるのでそれを利用すれば良いのでは。

/////////インクルード #include "hspcv.as" #include "user32.as" #define default_xsize 640;初期Xサイズ #define default_ysize 480;初期Yサイズ ///////////モジュール #module #deffunc reset_var onexit;変数を初期化します dim x@ : dim y@ : dim mx@ : dim my@ : dim key@ dim xs:dim ys dim xsize@:dim ysize@ sdim filename@,1 return #global ///////////モジュールにより変数初期化 reset_var /////////ウィンドウ作成 screen 0,ginfo(20),ginfo(21),2 GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat | $10000 | $40000;最大化を有効にしてやる oncmd gosub*WM_MINMAXINFO,$00000024;MINMAXINFO使用 width default_xsize,default_ysize /////////on系命令 onexit gosub*exit ///////////////////////ファイルロード dialog "jpg",16,"画像ファイル" if stat=0 : end sdim filename,256;領域確保 filename=refstr //////////////////////CV側でロード exist filename;ファイルの有無を確認 if strsize=-1 : end cvload filename,0;ロード if stat!0 : end ////////////////////////画像サイズ取得 cvgetinfo xsize,0, CVOBJ_INFO_SIZEX cvgetinfo ysize,0, CVOBJ_INFO_SIZEY redraw 0 syscolor 15 : boxf;塗りつぶし cvgetimg 0,1;表示 width default_xsize,default_ysize redraw 1 gsel 0,1;ウィンドウ表示 repeat stick key,$300;キー取得 if key&$100 { x=ginfo_vx : y=ginfo_vy;描画地点を保存 mx = ginfo_mx : my = ginfo_my;マウス位置を保存 gosub *move_picture } wait 1 loop stop *move_picture ////ドラッグで移動されたときに飛んできます repeat stick key,$300;キー取得 if (key&$100)=0 : break groll x+(mx-ginfo_mx),y+(my-ginfo_my);移動 xs=ginfo_vx+ginfo(12):ys=ginfo_vy+ginfo(13) title ""+xs+"/"+ys+"" wait 1 loop return *exit ///onexitを無効化 onexit 0 ///マクロ取り消し #undef default_xsize #undef default_ysize ///終了 end *WM_MINMAXINFO dim MINMAXINFO,9 dupptr MINMAXINFO,lparam,4*2*5,4 if xsize>ginfo(26)|ysize>ginfo(27):{;もしも、画像サイズが初期化サイズより大きかったら MINMAXINFO.8=xsize MINMAXINFO.9=ysize }else:{;そうでなかったら MINMAXINFO.8=ginfo(20) MINMAXINFO.9=ginfo(21) } return 0



CEO

リンク

2010/3/26(Fri) 08:01:55|NO.31575

返信遅くなりました。すみません。

ビットマップ領域を確保しないといけないんですね…
勉強になりました。
cvgetimgをうまく使ってできるようにしたいと思います。
ありがとうございました。



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