マウスホバーって本体のほうかな
もっと細かく制御したいならサブクラス化するとか、
bgscrを使って自前のコンボボックスを作るとかです。
#use user32,gdi32
cbx_rect=50,50,200,40 //位置とサイズ
cbx_count=4 //アイテムの数
cbx_text="Red","Green","Blue","Yellow" //テキスト
cbx_data=0xff0000,0x00ff00,0x0000ff,0xffff00 //データ
cbx_min=8 //リストに表示する数
cbx_buf=10 //オーナードロー用のバッファID
cbx_draw=*draw //描画を行うラベル
cbx_id=0 //オブジェクトID
cbx_hwnd=0 //オブジェクトハンドル
cbx_stat=0 //アイテムの状態(1=選択,2=フォーカス,4=本体,8=本体ホバー)
cbx_index=0 //アイテムのインデックス
//バッファ初期化
buffer cbx_buf,256,256
font "Yu Gothic",20
//コンボボックス初期化
gsel 0
pos cbx_rect(0),cbx_rect(1)
winobj "combobox","",0,0x50200013,cbx_rect(2),cbx_rect(3)
cbx_id=stat
cbx_hwnd=objinfo_hwnd(cbx_id)
sendmsg cbx_hwnd,0x0153,0,cbx_rect(3) //CB_SETITEMHEIGHT
sendmsg cbx_hwnd,0x0153,-1,cbx_rect(3)
sendmsg cbx_hwnd,0x1701,cbx_min //CB_SETMINVISIBLE
repeat cbx_count
sendmsg cbx_hwnd,0x0143 //CB_ADDSTRING
loop
oncmd gosub *drawitem,0x002B //WM_DRAWITEM
stop
*draw
//背景の描画
if cbx_stat&4{
if cbx_stat&8{
rgbcolor 0x8888ff //本体ホバー
}else{
rgbcolor 0xffffff //本体
}
}else{
if cbx_stat&1{
rgbcolor 0x8888ff //選択状態
}else{
if cbx_index\2{
rgbcolor 0xeeeeee //リストA
}else{
rgbcolor 0xffffff //リストB
}
}
}
boxf
//選択なしの描画
if cbx_index=-1{
rgbcolor 0x888888
pos 0,7
mes "色を選択"
return
}
//データの描画
rgbcolor 0
boxf 8,8,30,30
rgbcolor cbx_data(cbx_index)
boxf 9,9,29,29
//テキストの描画
pos 40,7
rgbcolor 0
mes cbx_text(cbx_index)
return
*drawitem
if cbx_drawitem(wparam,lparam){ return 0 }
return
#defcfunc cbx_drawitem int wp,int lp,local dis,local sel
dupptr dis,lp,48,4 //DRAWITEMSTRUCT
if dis(5)!=cbx_hwnd { return 0 }
//描画するアイテムの情報を設定
cbx_index=dis(2)
cbx_stat=0
if dis(4)&0x0001 { cbx_stat|=1 } //ODS_SELECTED
if dis(4)&0x0010 { cbx_stat|=2 } //ODS_FOCUS
if dis(4)&0x1000 { cbx_stat|=4 } //ODS_COMBOBOXEDIT
if WindowFromPoint(ginfo_mx,ginfo_my)=cbx_hwnd { cbx_stat|=8 }
cbx_rect=0,0,dis(9)-dis(7),dis(10)-dis(8)
//ユーザーの描画処理を呼んでそれをコピー
sel=ginfo_sel
gsel cbx_buf
gosub cbx_draw
BitBlt dis(6),dis(7),dis(8),dis(9)-dis(7),dis(10)-dis(8),hdc,0,0,0x00CC0020 //SRCCOPY
gsel sel
return 1