HSP2.xでMDIウインドウを作成するサンプルコード
Hot Soup Processor 2.x系でのMDIウインドウを作成するためのサンプルコードです。
loadlibとllmodが必要になります。
WINAPIのSetParent関数を呼び出し、任意のウインドウに、強引に親ウインドウを設定しています。(^^;
SetParent関数の説明に関しては、MicroSoft社のMSDNライブラリや、LCC-Win32のAPIマニュアル等で調べると良いでしょう。
かなーり昔に作ったソースですが、需要があればHSP3用に書き直します。
・・・いや、需要無いな(笑)
loadlibとllmodが必要になります。
WINAPIのSetParent関数を呼び出し、任意のウインドウに、強引に親ウインドウを設定しています。(^^;
SetParent関数の説明に関しては、MicroSoft社のMSDNライブラリや、LCC-Win32のAPIマニュアル等で調べると良いでしょう。
かなーり昔に作ったソースですが、需要があればHSP3用に書き直します。
・・・いや、需要無いな(笑)
; モジュールの定義
#module
#include "loadlib.as"
; ●書式
; SetMDI p1, p2
; p1 = 0〜(0) : 親に設定したいウインドウのID
; p2 = 0〜(0) : 子に設定したいウインドウのID
; ●説明
; 指定したウインドウに対して、MDIの設定を行います。
; 必ず、screen, bgscr, buffer等で
; 作成済みのウインドウのIDを指定する事。
;
#deffunc SetMDI int, int
mref p1, 0
mref p2, 1
; USER32.DLLをロードする
ll_libload dll, "USER32.DLL"
; GetActiveWindow関数、
; SetParent関数をロードする
ll_getproc getwnd, "GetActiveWindow", dll
ll_getproc setparent, "SetParent", dll
; 子にしたいウインドウのハンドルを取得
gsel p2, 1
ll_callfnv getwnd
ll_ret hwnd
; 親にしたいウインドウのハンドルを取得
gsel p1, 1
ll_callfnv getwnd
ll_ret hwnd.1
; MDI設定
if hwnd != hwnd.1{ ; ←安全処理
ll_callfunc hwnd, 2, setparent
}
; DLLの解放
ll_libfree dll
return
#global
; ウインドウの作成
screen 0, 640, 480
screen 2, 400, 300
screen 3, 200, 100
; MDIの設定
SetMDI 0, 2
SetMDI 0, 3
; 適当に描画
gsel 2 : title "ID = 2" : cls 4
gsel 3 : title "ID = 3" : cls 4
gsel 0, 1 : title "ID = 0" : cls 3
stop
#module
#include "loadlib.as"
; ●書式
; SetMDI p1, p2
; p1 = 0〜(0) : 親に設定したいウインドウのID
; p2 = 0〜(0) : 子に設定したいウインドウのID
; ●説明
; 指定したウインドウに対して、MDIの設定を行います。
; 必ず、screen, bgscr, buffer等で
; 作成済みのウインドウのIDを指定する事。
;
#deffunc SetMDI int, int
mref p1, 0
mref p2, 1
; USER32.DLLをロードする
ll_libload dll, "USER32.DLL"
; GetActiveWindow関数、
; SetParent関数をロードする
ll_getproc getwnd, "GetActiveWindow", dll
ll_getproc setparent, "SetParent", dll
; 子にしたいウインドウのハンドルを取得
gsel p2, 1
ll_callfnv getwnd
ll_ret hwnd
; 親にしたいウインドウのハンドルを取得
gsel p1, 1
ll_callfnv getwnd
ll_ret hwnd.1
; MDI設定
if hwnd != hwnd.1{ ; ←安全処理
ll_callfunc hwnd, 2, setparent
}
; DLLの解放
ll_libfree dll
return
#global
; ウインドウの作成
screen 0, 640, 480
screen 2, 400, 300
screen 3, 200, 100
; MDIの設定
SetMDI 0, 2
SetMDI 0, 3
; 適当に描画
gsel 2 : title "ID = 2" : cls 4
gsel 3 : title "ID = 3" : cls 4
gsel 0, 1 : title "ID = 0" : cls 3
stop
この記事の最終更新日:2017/10/30
最初に記事を書いた日:2017/10/30
この記事をシェアする
関連記事
- ・HSP2.xで、MIDIファイルのヘッダ情報を調べるモジュール
- ・HSP2.xで、LHA書庫の圧縮と解凍を実現するモジュール
要loadlib&llmod - ・HSP2.xで、HTMLファイル内のリンク先を列挙するサンプルコード(モジュール付き)
- ・HSP2.x系で、ファイルパスから、ファイル名やフォルダ名を取得するサンプルモジュール
- ・HSP2.x系で、アルファベットの大文字と小文字を相互変換するサンプルモジュール
- ・HSP2.x系で、平方根の近似値を整数で取得するサンプルモジュール
- ・HSP2.x系で、getkey、stick命令のキー番号を取得・表示するサンプルコード
- ・HSP2.x系で、円の中心に向かってグラデーションをかけるサンプルコード
- ・HSP2.x系用 ベンチマークプログラム ソースコード