UWSCに最小化ボタンをつける

以前、最小化させたいという質問があったのを思い出した。
UWSC v5.0でウインドウががらっと変わったので、もしかして、と思って、、、
今手元の環境でやったら、できた。

DEF_DLL GetWindowLongW(dword, int): long: user32
DEF_DLL SetWindowLongW(dword, int, long): long: user32
CONST GWL_STYLE = -16
DIM hnd = IDTOHND(GETID(GET_THISUWSC_WIN))
SetWindowLongW(hnd, GWL_STYLE, GetWindowLongW(hnd, GWL_STYLE) OR $20000)


以下余談。



解説

標準のウインドウであれば、ウインドウスタイルを変更するだけで、最小化ボタンの表示・非表示は制御できます。
ウインドウスタイルの変更は、SetWindowLong関数でGWL_STYLEを指定することで行います。
(拡張スタイルの場合は、GWL_EXSTYLE)


現在のウインドウスタイルは、GetWindowLong関数で取得できます。
最小化ボタンは、WS_MINIMIZEBOX($20000)のビットが立っているかで制御されます。
なお、最大化ボタンは、WS_MAXIMIZEBOX($10000)。
両方を立てる($30000)と、両方が表示されることになります。
最大化ボタンはあってもあんまり嬉しくないけど。(動作はします)

最小スクリプト

最小は2行かな。
SetWindowLong関数が変更前の値を返すことを利用して、GetWindowLong関数の肩代わり。

DEF_DLL SetWindowLongW(dword,int,long):long:user32
SetWindowLongW(IDTOHND(GETID(GET_THISUWSC_WIN)),-16,SetWindowLongW(IDTOHND(GETID(GET_THISUWSC_WIN)),-16,0)OR $20000)

ま、こんなせこいことはしないで、素直に最初に書いた5行を使ってください。