とあるプログラマさんのコードをちょっと弄ってみました。
buttonイベントではなく、WM_COMMANDのウィンドウメッセージがあって、
かつBN_SETFOCUS通知があった時に強調部分を変更するようにしています。
これでダイアログのボタンの動作にもう少し近付いたと思います。
#include "user32.as"
#const WS_VISIBLE $10000000
#const WS_CHILD $40000000
#const GWL_STYLE $FFFFFFF0
#const BS_DEFPUSHBUTTON $00000000
#const BS_PUSHBUTTON $00000001
#const BS_NOTIFY $00004000
#const BN_SETFOCUS $6
#const WM_COMMAND $0111
#const but_common WS_VISIBLE|WS_CHILD|BS_NOTIFY //BN_SETFOCUSを受け取るにはBS_NOTIFYが必要
screen 0
dim hbutton,3
button gosub "ボタン1",*dummy
hButton.0=objinfo_hwnd(stat)
button gosub "ボタン2",*dummy
hButton.1=objinfo_hwnd(stat)
button gosub "ボタン3",*dummy
hButton.2=objinfo_hwnd(stat)
repeat 3
SetWindowLong hButton.cnt,GWL_STYLE,but_common
loop
oncmd gosub *comm,WM_COMMAND
SetFocus hButton.0 //1つめのボタンに強制的にフォーカスを当てる
stop
*comm
repeat 3
if lparam=hButton.cnt {
if ((wParam >> 16) & 0xFFFF)=BN_SETFOCUS {
cnt0=cnt
repeat 3
SetWindowLong hButton.cnt,GWL_STYLE,but_common|(BS_PUSHBUTTON*(cnt=cnt0))
InvalidateRect hButton.cnt,0,1
loop
}
break
}
loop
return 0
*dummy
return