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


HSPTV!掲示板


未解決 解決 停止 削除要請

2012
1004
(´ω`)自動オブジェの造り方というか……?3解決


(´ω`)

リンク

2012/10/4(Thu) 13:05:22|NO.49728

ちょっと説明が難しいので、まず以下のソースを見ていただきたいのですが……

screen 0, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 screen 1, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 screen 2, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 stop *kitade dialog hwnd return
これで私が期待していたのは、各ウィンドウでマウスダウンするとそれぞれのhwndが
ダイアログに表示される、という動作でしたが、実際にはどのウィンドウをクリックしても
一番最後に作ったウィンドウのハンドルが表示されます。

 ・ユーザーが任意にウィンドウを作成できるようにする
 ・作成時にウィンドウメッセージに反応するようにしとく
 ・反応時には、どのウィンドウからのメッセージかで処理をいろいろする
 ・自由にウィンドウ破棄もできる

という……
表現がむずいですが、ユーザー操作に自動的に反応するオブジェ(ウィンドウ)が作り
たいな、ということなわけです。さらに加えると、上記ソースではオブジェを3つ作って
ますが、いくつ作るかはユーザー任せにしたいのです。

何かいいアイディアとか、「おめーこんな基本も知らねーのかよバカ」などがありましたら
ご教授願えたら。(;ω;)



この記事に返信する


Tetr@pod

リンク

2012/10/4(Thu) 13:54:04|NO.49730

説明が足りません。
> ・ユーザーが任意にウィンドウを作成できるようにする
ユーザーにどのように作成させたいのか。
(inputを使って回数を入れさせるのか、buttonを押した時に作成するのか、その他の方法なのか)
> ・自由にウィンドウ破棄もできる
ユーザーにどうやって破棄させるのか。
(スクリーンごとにbuttonを置くのか、oncmdやonclickで処理をするのか)
そこらへんの具体的な内容を書くと、回答する人も答えやすくなります。


さて、マイナスな話はこのくらいにして説明を。

hwndでは、現在のgselでの操作先のハンドルが返ります。
現在アクティブなウィンドウのハンドルが知りたい場合は、
gselで操作先をアクティブなウィンドウにしてから取得しなければなりません。
現在アクティブなウィンドウはginfo(2)若しくはginfo_actで取得できます。

また、oncmdを使う場合、いつイベントが発生するかわからないので、
一旦現在のgselでの操作先を変数に入れ、処理が終わった時に
またgselを使って元のgselでの操作先に変更します。

ユーザーがどのようにしてウィンドウの数を指定するのかはわかりませんが、
repeat命令をつかえば指定回数処理をすることができます。

windowlen = 3// 3回ウィンドウを作る。 // *ユーザーに指定させたい場合、数値型で初期化しinputで入力させる。 repeat windowlen screen cnt, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 wait 0 loop stop *kitade beforegsel = ginfo(3)// 現在のgselの操作先をbeforegselに入れ、 gsel ginfo(2)// 操作先を現在アクティブなウィンドウIDに変更し dialog hwnd// ウィンドウハンドルを表示し、 gsel beforegsel// もとの操作先に戻す。 return



fortunehill

リンク

2012/10/4(Thu) 16:26:25|NO.49737

/*こう言う事?(67と96間違えたので訂正)*/

screen 0, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 screen 1, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 screen 2, 640, 480 : title str(hwnd) oncmd gosub *kitade, 0x0201 stop *kitade mref BMSCR,96+ginfo_intid dialog strf("screenID = %d hwnd = %d",ginfo_intid,BMSCR(13)) return



(´ω`)

リンク

2012/10/4(Thu) 17:27:16|NO.49744

>Tetr@pod さま
>fortunehill さま

私のつたない説明でやりたいことをお察し頂き、大変恐縮です。(;ω;)

要は、デスクトップマスコットみたいな感じで、いくらでもマスコット━━例えばちっちゃい
ピカ○ュウとか初音ナニヤラとか━━をデスクトップ上にばらまくことができ、それぞれは
勝手にアニメをしながら、ユーザーにつつかれた奴は何かの反応を示す、みたいなことを
したかったわけです。

ウィンドウをクリックした時点では操作先ウィンドウは変わらないから、hwndもちゃんと
取れない、というわけですね……
あと、BMSCR構造体から取得する手段もある、と。ginfo_intidというマクロは初めて知り
ました。なるほどなあ……

勉強になりました。
激しく感謝です!(*´ω`*)



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