>>Ponyoさん、hamさn
非クライアント領域に無理やり描画することは可能らしいですが、結構面倒くさそうですね… やはりタイトルバーなしウィンドウに疑似タイトルバーを付けてあげるのが良さそうですね。しかし最大化処理とかも含めるとこっちもかなり大変そうですが…
ありがとうございます。以下検証用コードです。
#include "user32.as"
// 定数定義ヘッダ "constant.as" がない環境用
#define GWL_STYLE $FFFFFFF0
#define WS_OVERLAPPED 0
#define WS_BORDER $00800000
#define WS_VISIBLE $10000000
#define WS_CHILD $40000000
#define WS_CLIPCHILDREN $02000000
#define WS_CLIPSIBLINGS $04000000
#define SWP_NOACTIVATE $00000010
#define SWP_NOSIZE $00000001
#define SWP_FRAMECHANGED $00000020
#define SWP_NOZORDER $00000004
#define SWP_NOMOVE $00000002
#define HWND_TOP $00000000
#define WM_LBUTTONDOWN $00000201
#define WM_NCLBUTTONDOWN $000000A1
#define HTCAPTION $00000002
#define CaptionSize 26 ;タイトルバーのサイズ(高さ)
bgscr 0 ;screenで初期化したウィンドウだとタイトルバーの残骸が出るためbgscrで
GetWindowLong hwnd,GWL_STYLE ;ウィンドウスタイル取得
SetWindowLong hwnd,GWL_STYLE,stat|WS_BORDER|WS_CLIPCHILDREN|WS_CLIPSIBLINGS ;ボーダーと子ウィンドウ描画用スタイルを付与
SetWindowPos hwnd, HWND_TOP, 0,0, 0,0, SWP_NOSIZE| SWP_NOMOVE| SWP_NOZORDER |SWP_FRAMECHANGED ;ボーダー変更したため
hMainWindow=hwnd
bgscr 1,ginfo_winx,CaptionSize ;タイトルバー用子ウィンドウ
SetParent hwnd,hMainWindow ;子ウィンドウに設定
SetWindowPos hwnd , 0 , 0,0 , NULL,NULL,SWP_NOSIZE|SWP_NOZORDER ;メインウィンドウの(0,0)に移動
oncmd gosub *Drag,WM_LBUTTONDOWN ;ドラッグ時に移動
hCaptionWindow=hwnd
color 56,173,249
boxf
color 255,255,255
pos 10,2
mes "たいとる"
objsize CaptionSize-4,CaptionSize-4
pos ginfo_winx-CaptionSize,2
button goto "X",*exit
gsel 0
pos 0,CaptionSize
mes "メインウィンドウ上に子ウィンドウを張り付けてるので、"
mes "見た目上のクライアント領域はY方向にタイトルバーのサイズだけ動かす必要がある。"
mes "見た目上のクライアント領域すら別の子ウィンドウにすれば(0,0)にすることができる。"
stop
*Drag
SendMsg hMainWindow,WM_NCLBUTTONDOWN,HTCAPTION,0 ;移動
return
*exit
end