站在巨人的肩上

Standing on Shoulders of Giants
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

实现ArcGIS符号选择控件(ComboBox)

Posted on 2011-08-01 00:38  姚箫  阅读(1252)  评论(0)    收藏  举报

1、首先来看一下效果图,我们接下来要实现就是右边那个符号选择控件(SymbolComboBox);

2、要实现这样一个符号选择器,我们需要将VS中的ComboBox进行重写,使它能实现图像显示,如下代码:

View Code
 1         public SymbolComboBox()
 2         {
 3             this.DrawMode = DrawMode.OwnerDrawFixed;
 4             this.DropDownStyle = ComboBoxStyle.DropDownList;
 5         }
 6 
 7         protected override void OnDrawItem(DrawItemEventArgs e)
 8         {
 9             e.DrawBackground();
10             e.DrawFocusRectangle();
11 
12             try
13             {
14                 //显示图片
15                 Image image = (Image)Items[e.Index];
16                 Rectangle rect = e.Bounds;
17                 rect.Height -= 2;
18                 rect.Width -= 2;
19                 rect.X += 1;
20                 rect.Y += 1;
21                 e.Graphics.DrawImage(image, rect);
22             }
23             catch
24             {
25                 if (e.Index != -1)
26                 {
27                     //不是图片则显示字符
28                     e.Graphics.DrawString(Items[e.Index].ToString(), e.Font, new SolidBrush(e.ForeColor), e.Bounds.X, e.Bounds.Y);
29                 }
30             }
31             finally
32             {
33                 base.OnDrawItem(e);
34             }
35         }

3、再接下来就是要在SymbolComboBox中实现符号选择属性,如下代码:

View Code
 1         private ISymbologyStyleClass m_SymbologyStyleClass = null;
 2         private List<IStyleGalleryItem> m_SymbolArray = new List<IStyleGalleryItem>();
 3 
 4         public ISymbologyStyleClass SymbologyStyleClass
 5         {
 6             get
 7             {
 8                 return m_SymbologyStyleClass;
 9             }
10             set
11             {
12                 m_SymbologyStyleClass = value;
13 
14                 if (m_SymbologyStyleClass != null)
15                 {
16                     this.m_SymbolArray.Clear();
17                     this.BeginUpdate();
18                     this.Items.Clear();
19                     for (int i = 0; i < m_SymbologyStyleClass.ItemCount; i++)
20                     {
21                         IStyleGalleryItem item = m_SymbologyStyleClass.GetItem(i);
22                         stdole.IPictureDisp picture = m_SymbologyStyleClass.PreviewItem(item, this.Width, this.Height);
23                         Image image = Image.FromHbitmap(new IntPtr(picture.Handle));
24                         image = new Bitmap(image, new Size(image.Width - 10, image.Height));
25                         this.Items.Add(image);
26                         this.m_SymbolArray.Add(item);
27                     }
28                     this.EndUpdate();
29                 }
30             }
31         }
32 
33         public IStyleGalleryItem SelectSymbol
34         {
35             get
36             {
37                 if (this.SelectedIndex >= 0 && m_SymbolArray.Count > this.SelectedIndex)
38                     return m_SymbolArray[this.SelectedIndex];
39                 else
40                     return null;
41             }
42         }

4、现在,这样一个符号选择控件就已经完成了,剩下的就是使用了,很简单,如下:

1             ISymbologyStyleClass styleClass = axSymbologyControl1.GetStyleClass(axSymbologyControl1.StyleClass);
2             this.colorRampComboBox1.SymbologyStyleClass = styleClass;