↓のようなスクリプトを見つけましたが、コンボボックスを開いた跡が残ります。
screen 1
//アイコン
color 255,0,0:circle 0,0,16,16,1
color 0,255,0:circle 16,0,32,16,1
color 0,0,255:circle 32,0,48,16,1
color 255,255,0:circle 48,0,64,16,1
screen 0
Text="AAA\nBBB\nCCC\nDDD"
//オーナードロー型コンボボックス
winobj "ComboBox","",0, 0x50200013,200:hComboBox=objinfo(stat,2)
sendmsg hComboBox, 0x153,,20//リストの行の高さ
sendmsg hComboBox,0x14E,0
notesel Text
repeat noteinfo(0),0
noteget _Text,cnt
sendmsg hComboBox,0x0143,0,_Text//項目追加(文字は見えない)
loop
sendmsg hComboBox,0x14E,0//項目選択
oncmd gosub *OnDrawItem,0x002B//WM_DRAWITEM
stop
*OnDrawItem
gsel 0
dupptr DIS, lparam, 48
mref BMSCR, 67
hdcOld=BMSCR(4)
BMSCR(4)=DIS.6//デバイスコンテキストを描きこみ先に変更し、直接描きこむ
if DIS.5 = hComboBox{
if DIS.4 & 1 {//選択状態
syscolor 13
color ginfo(16)^255,ginfo(17)^255,ginfo(18)^255//反転色
boxf DIS.7,DIS.8,DIS.9,DIS.10
syscolor 13:boxf DIS.7+1,DIS.8+1,DIS.9-1,DIS.10-1
syscolor 14
}else{//通常
syscolor 5:boxf DIS.7,DIS.8,DIS.9,DIS.10
syscolor 8
}
notesel Text
noteget _Text,DIS.2
pos DIS.7+18,DIS.8+2:mes _Text//文字描画
pos DIS.7+2,DIS.8+2:gcopy 1,DIS.2*16,0,16,16//アイコン描画
}
BMSCR(4)=hdcOld//ちゃんとデバイスコンテキストを元のように戻す
return