主要包括下面几个步骤:
1.自定义一个PictureComboBox类,可以Image作为Item添加的ComboBox;
//构造函数
public PictureComboBox()
{
//以下两句是关键的;
DrawMode = DrawMode.OwnerDrawFixed;
DropDownStyle. = ComboBoxStyle.DropDownList;
}
//重写函数
protected override void OnDrawItem(DrawItemEventArgs e)
{
e.DrawBackground();
e.DrawFocusRectangle();
try
{
//显示图片
if(e.Index!=-1)//反正初始化失败
{
Image image = (Image)Items[e.Index];
System.Drawing.Rectangle rect = e.Bounds;
e.Graphics.DrawImage(image, rect);
}
}
catch (Exception ex)
{
throw ex;
}
finally
{
base.OnDrawItem(e);
}
}
2.将自定义的PictureComboBox添加到窗体上;
先添加一个普通的ComboBox,然后在定义的地方修改:
private PictureComboBox cmbColorRamp;
this.cmbColorRamp = new CreateGDB.ThemeMap.PictureComboBox();
3.读取ESRI.ServerStyle文件中esriStyleClassColorRamps下的ColorRamp;
这里是借助AxSymbologyControl来实现读取的。
4.将各个ColorRamp对象转换为Image;
5.将Image添加到PictureComboBox中。
static AxSymbologyControl m_SymbologyControl = new AxSymbologyControl();
private ISymbologyStyleClass symbologyStyleClass = null;
//需要将AxSymbologyControl 添加到窗体中
this.Controls.Add(m_SymbologyControl);
m_SymbologyControl.LoadStyleFile(Application.StartupPath + "\\ESRI.ServerStyle");
m_SymbologyControl.StyleClass = esriSymbologyStyleClass.esriStyleClassColorRamps;
symbologyStyleClass = m_SymbologyControl.GetStyleClass(esriSymbologyStyleClass.esriStyleClassColorRamps)
for (int i = 0; i < symbologyStyleClass.get_ItemCount(symbologyStyleClass.StyleCategory); i++)
{
IStyleGalleryItem pStyleGalleryItem = symbologyStyleClass.GetItem(i);
string aa = pStyleGalleryItem.Category;
int bb = pStyleGalleryItem.ID;
string cc = pStyleGalleryItem.Name;
stdole.IPictureDisp picture = symbologyStyleClass.PreviewItem(pStyleGalleryItem, pComboBox.Width, pComboBox.Height - 1);
System.Drawing.Image image = System.Drawing.Image.FromHbitmap(new System.IntPtr(picture.Handle));
pComboBox.Items.Add(image);
}