public IElement CreateElement(IActiveView pAV, IPoint pt) { IElement element; double num = 0; int count = this.m_symbolLists.Count / this.m_colum; if (count * this.m_colum < this.m_symbolLists.Count) { count++; } int num1 = 0; double num2 = 0; double height = 0; double y = pt.Y + 0.1; IGroupElement groupElementClass = new GroupElement() as IGroupElement; IEnvelope envelopeClass = new Envelope() as IEnvelope; envelopeClass.PutCoords(pt.X + 0.1, pt.Y + 0.1, pt.X + 0.1, pt.Y + 0.1); IRgbColor rgbColorClass = new RgbColor() { Red = 255, Blue = 255, Green = 255 }; IElement element1 = this.CreatePolygonElement(envelopeClass, rgbColorClass); groupElementClass.AddElement(element1); pt.X = pt.X + 0.1; pt.Y = pt.Y + 0.1; IElement element2 = null; if (this.m_Title.Length > 0) { element2 = this.CreateTitleElement(pt); IEnvelope envelope = new Envelope() as IEnvelope; element2.QueryBounds(pAV.ScreenDisplay, envelope); height = envelope.Height; groupElementClass.AddElement(element2); } double x = pt.X; double mItemheight = pt.Y - height - this.m_rowspace; IPoint pointClass = new ESRI.ArcGIS.Geometry.Point(); IEnvelope envelopeClass1 = new Envelope() as IEnvelope; List <double> nums = new List <double>(); List <double> nums1 = new List <double>(); if (height > 0) { nums.Add(mItemheight + this.m_rowspace / 2); } bool flag = false; for (int i = 0; i < this.m_symbolLists.Count; i++) { ISymbol item = this.m_symbolLists[i]; pointClass.PutCoords(x, mItemheight); element = this.CreateElement(pointClass, this.m_symbolLists[i], this.m_backsymbolLists[i] as IFillSymbol, this.m_symbolDescriptions[i]); element.QueryBounds(pAV.ScreenDisplay, envelopeClass1); if (!(element is IGroupElement)) { groupElementClass.AddElement(element); } else { int elementCount = (element as IGroupElement).ElementCount; for (int j = 0; j < (element as IGroupElement).ElementCount; j++) { groupElementClass.AddElement((element as IGroupElement).Element[j]); } } num2 = (num2 > envelopeClass1.Width ? num2 : envelopeClass1.Width); mItemheight = mItemheight - this.m_itemheight - this.m_rowspace; num1++; if (num1 == count) { mItemheight = pt.Y - height - this.m_rowspace; nums1.Add(x + this.m_itemwidth + this.m_space / 2); x = x + (num2 + this.m_colspace); nums1.Add(x - this.m_colspace / 2); num1 = 0; num2 = 0; flag = true; } else if (!flag) { nums.Add(mItemheight + this.m_rowspace / 2); } } if (num1 != count) { mItemheight = pt.Y - height - this.m_rowspace; nums1.Add(x + this.m_itemwidth + this.m_space / 2); x = x + (num2 + this.m_colspace); nums1.Add(x - this.m_colspace / 2); } IEnvelope envelope1 = new Envelope() as IEnvelope; (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1); (groupElementClass as IElement).Activate(pAV.ScreenDisplay); envelope1.Expand(0.05, 0.05, false); try { if (!this.m_HasBorder) { groupElementClass.DeleteElement(element1); } else { IRgbColor rgbColorClass1 = new RgbColor() { Red = 255, Blue = 255, Green = 255 }; (groupElementClass as IGroupElement3).ReplaceElement(element1, this.CreatePolygonElement(envelope1, rgbColorClass1)); } (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1); if (this.m_isdrawline) { foreach (double num3 in nums) { element = this.CreateLineElement(envelope1.XMin, num3, envelope1.XMax, num3); groupElementClass.AddElement(element); } double yMax = envelope1.YMax; if (nums.Count > 0) { if (height > 0) { yMax = nums[0]; } } if (nums1.Count > 0) { nums1.RemoveAt(nums1.Count - 1); } foreach (double num3 in nums1) { element = this.CreateLineElement(num3, envelope1.YMin, num3, yMax); groupElementClass.AddElement(element); } (groupElementClass as IElement).QueryBounds(pAV.ScreenDisplay, envelope1); } this.m_pEnvelop = envelope1; } catch (Exception exception) { } if (element2 != null) { IPoint point = new ESRI.ArcGIS.Geometry.Point(); point.PutCoords((envelope1.XMin + envelope1.XMax) / 2, y); element2.Geometry = point; (element2 as ITextElement).Symbol = this.FontStyle(20, esriTextHorizontalAlignment.esriTHACenter, esriTextVerticalAlignment.esriTVATop); } (groupElementClass as IElementProperties).Name = "图例"; (groupElementClass as IElement).Geometry = envelope1; return(groupElementClass as IElement); }