差分ファイル作成ツールでは、サイズが可変なウィンドウで、タブコントロールを使う予定なので、サイズ可変なタブコントロールができるか、試してみました。
参考にしたページは以下の3つ
これらのページの通りにタブコントロールを作って、 WM_SIZE 時に MoveWindow でリサイズする。もっと難しいことしないといけないかと身構えて立ち向かったんですが、普通のオブジェクトを可変サイズにするのとほぼ同じ工程でできました。
#include "user32.as"
#include "gdi32.as"
#const NUMBER_OF_TABS 6 // タブの数
#const TAB_CONTENT_WINDOW_ID 20 // タブの内容のウィンドウの開始ID
// 可変ウィンドウを作成
screen 0, ginfo_dispx, ginfo_dispy, 2
GetWindowLong hwnd, -16
SetWindowLong hwnd, -16, stat | $50000 // WS_MAXIMIZEBOX | WS_SIZEBOX
width 320, 240
syscolor 15 : boxf
// タブコントロールを配置
pos 20, 20
// WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_CLIPCHILDREN
winobj "SysTabControl32", "", 0, $56000000, ginfo_winx - 40, ginfo_winy - 40
hTabControl = objinfo( 0, 2 )
// フォントをデフォルトGUIに
GetStockObject 17
sendmsg hTabControl, $30, stat, 0 // WM_SETFONT
dim rect, 4
dim tcitem, 7
repeat NUMBER_OF_TABS
// タブのキャプションを設定
caption = strf("Tab%c", 'A' + cnt \ 26 )
tcitem = 1, 0, 0, varptr( caption ), strlen( caption ) + 1
sendmsg hTabControl, $1307, cnt, varptr( tcitem ) // TCM_INSERTITEMA
//タブの内容のウィンドウを作成
GetClientRect hTabControl, varptr( rect )
sendmsg hTabControl, $1328, 0, varptr( rect ) //TCM_ADJUSTRECT
bgscr cnt + TAB_CONTENT_WINDOW_ID, ginfo_dispx, ginfo_dispy, 2
SetWindowLong hWnd, -16, $46000000 // WS_CLIPCHILDREN | WS_CLIPSIBLINGS | WS_CHILD
SetParent hWnd, hTabControl
width rect.2 - rect.0, rect.3 - rect.1, rect.0, rect.1
//タブの内容の描画
hsvcolor cnt * 192 / NUMBER_OF_TABS, 255, 128 : boxf
hsvcolor 0, 0, 255 : mes ""+cnt
loop
gsel 0
oncmd gosub *l_On_WM_NOTIFY, $4e // WM_NOTIFY
oncmd gosub *l_On_WM_SIZE, $05 // WM_SIZE
gosub *l_On_TCN_SELCHANGE
gsel 0, 1
stop
*l_On_WM_NOTIFY
// 通知コードが TCN_SELCHANGE だったらタブチェンジ
dupptr NMHDR, lparam + 8, 4
if NMHDR == $FFFFFDD9 : gosub *l_On_TCN_SELCHANGE
return
*l_On_TCN_SELCHANGE
// さっき開いていたタブのウィンドウを非表示に
gsel CurrentTabId + TAB_CONTENT_WINDOW_ID, -1
// 選択されているタブを取得
sendmsg hTabControl, $130b, 0, 0 // TCM_GETCURSEL
CurrentTabId = stat
gsel CurrentTabId + TAB_CONTENT_WINDOW_ID, 1
// タブのキャプションを表示
sendmsg hTabControl, $1305, CurrentTabId, varptr( tcitem ) // TCM_GETITEM
dupptr caption, tcitem.3, tcitem.4, 2
gsel 0
title caption+"が選択されました"
return
*l_On_WM_SIZE
// タブコントロールのリサイズ
MoveWindow hTabControl, 20, 20, ginfo_winx - 40, ginfo_winy - 40, 1
// タブコントロールの内容のウィンドウのリサイズ
repeat NUMBER_OF_TABS
gsel cnt + TAB_CONTENT_WINDOW_ID
GetClientRect hTabControl, varptr( rect )
sendmsg hTabControl, $1328, 0, varptr( rect ) // TCM_ADJUSTRECT
MoveWindow hWnd, rect.0, rect.1, rect.2 - rect.0, rect.3 - rect.1, 1
// さらに、タブコントロールの内容のウィンドウ内にあるオブジェクトもリサイズしておくとよし
loop
gsel
return