HSPからMDIウィンドウを作成しようとしたとき、
以下のような方法では子ウィンドウが操作不可能となってしまい、
ウィンドウ枠も細くなってしまいます。(この動作はOSによっても違ったりするでしょうか?)
以下の方法では上記の問題は改善しますが、サイズが可変になってしまうのと、
#uselib "USER32.DLL" #func SetParent "SetParent" int , int screen 0,800,600:p=hwnd screen 2,400,300,4,100,100:c=hwnd SetParent c,p
子ウィンドウがアクティブになったとき親ウィンドウが非アクティブになってしまいます。
また、以下のように子ウィンドウにWS_CHILD(0x40000000)を与えますと
#uselib "USER32.DLL" #func SetParent "SetParent" int , int screen 0,800,600:p=hwnd screen 2,400,300,0,100,100:c=hwnd SetParent c,p
正常に子ウィンドウを掴んだ時親ウィンドウがアクティブを維持しますが、
今度は子ウィンドウのタイトルバーが常時完全な非アクティブとなり、
一般的なMDIアプリケーションのような表示(子ウィンドウのキャプションバーが使用可能な見た目)になりません。
サイズ固定の子ウィンドウを作成した時の問題はWindowsのクラシックUIを利用した際に
#uselib "USER32.DLL" #func SetParent "SetParent" int , int #func GetWindowLong "GetWindowLongA" sptr,sptr #func SetWindowLong "SetWindowLongA" sptr,sptr,sptr screen 0,800,600:p=hwnd screen 2,400,300,0,100,100:c=hwnd SetParent c,p GetWindowLong hwnd, -16 SetWindowLong hwnd, -16, stat|$40000000 gsel 0,1
再現しない場合があるなど環境による影響を受け易いようです。
これらの問題を改善して(つまり、子ウィンドウはサイズ固定ウィンドウかつ
ウィンドウ周囲が細くならず、子ウィンドウを掴んだ時も親ウィンドウがアクティブを
維持する状態で安定的に)HSPからMDIウィンドウを利用する方法はあるでしょうか?
もしHSPからこのようなMDIウィンドウを作成する正しい手順について
情報をお持ちの方がいらっしゃれば是非お寄せいただければ幸いです。