packageorg.eclipse.swt.widgets;importjava.io.*;importorg.eclipse.swt.SWT;importorg.eclipse.swt.graphics.*;importorg.eclipse.swt.internal.win32.*;publicclassCustomComboextendsCombo
{publicCustomCombo( Composite parent,intstyle )
{super( parent, style );try{
InputStream is=getClass().getResourceAsStream("bullet.gif");
image=newImage( getDisplay(), is );
is.close();
}catch( IOException e )
{
e.printStackTrace();
}finalintCB_SETITEMHEIGHT=0x0153;
OS.SendMessage( handle, CB_SETITEMHEIGHT,0,24);
OS.SendMessage( handle, CB_SETITEMHEIGHT,-1,24);
}
@OverrideintwidgetStyle()
{finalintCBS_OWNERDRAWFIXED=0x0010;finalintCBS_HASSTRINGS=0x0200;//final int CBS_OWNERDRAWVARIABLE = 0x0020;returnsuper.widgetStyle()|CBS_OWNERDRAWFIXED|CBS_HASSTRINGS;
}
@OverrideprotectedvoidcheckSubclass()
{
}
@Overridepublicvoiddispose()
{
image.dispose();super.dispose();
}/*@Override
LRESULT wmMeasureChild( int wParam, int lParam )
{
MEASUREITEMSTRUCT mis = new MEASUREITEMSTRUCT();
OS.MoveMemory( mis, lParam, MEASUREITEMSTRUCT.sizeof );
mis.itemHeight = 40;
OS.MoveMemory( lParam, mis, MEASUREITEMSTRUCT.sizeof );
return null; // super.wmMeasureChild( wParam, lParam );
}*/@Override
LRESULT wmDrawChild(intwParam,intlParam )
{
DRAWITEMSTRUCT dis=newDRAWITEMSTRUCT();
OS.MoveMemory( dis, lParam, DRAWITEMSTRUCT.sizeof );
GC gc=newGC(newDCWrapper( dis.hDC ) );
Rectangle rc=newRectangle( dis.left, dis.top, dis.right-dis.left,
dis.bottom-dis.top );
Display display=getDisplay();if( (dis.itemState&OS.ODS_SELECTED)!=0)
{
gc
.setBackground( display
.getSystemColor( SWT.COLOR_LIST_SELECTION ) );
gc.setForeground( display
.getSystemColor( SWT.COLOR_LIST_SELECTION_TEXT ) );
gc.fillRectangle( rc );
}else{
gc.setBackground( display
.getSystemColor( SWT.COLOR_LIST_BACKGROUND ) );
gc.setForeground( display
.getSystemColor( SWT.COLOR_LIST_FOREGROUND ) );
gc.fillRectangle( rc );
}
String text=getItem( dis.itemID );
gc.drawImage( image, dis.left+1, dis.top+1);
gc.drawText( text, dis.left+20, dis.top );
gc.dispose();returnnull;
}privatestaticclassDCWrapperimplementsDrawable
{privateinthdc;
DCWrapper(inthdc )
{this.hdc=hdc;
}publicintinternal_new_GC( GCData data )
{returnhdc;
}publicvoidinternal_dispose_GC(inthandle, GCData data )
{
}
}privateImage image;
}