绘制图形后刷新视图的最佳方法是什么?
我在单击按钮时绘制了一个多边形以突出显示一个特征。然后,我需要刷新ActiveView以显示新的多边形。这行有效: mapControl.ActiveView.ScreenDisplay.StartDrawing(StartDrawing(mapControl.ActiveView.ScreenDisplay.hDC, (System.Int16)ESRI.ArcGIS.Display.esriScreenCache.esriNoScreenCache); mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape); mapControl.ActiveView.ScreenDisplay.FinishDrawing(); mapControl.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewAll, feature.Extent, null); 但是它总是重新加载每一层。我尝试了几乎所有PartialRefresh与其他对象调用的方法,esriViewDrawPhase但是没有一种方法显示新的多边形。 有比重绘更好的解决方案esriViewDrawPhase.esriViewAll吗? 更新资料 我用了一个ILayerExtensionDraw.AfterDraw测试阶段抽签和AfterDraw只被击中了PartialRefresh()用esriViewAll。该扩展已添加到MapControl.Layers中的所有图层。我希望它每次都会受到打击?在哪一层上mapControl.ActiveView.ScreenDisplay.DrawPolygon(feature.Shape);绘制,以使AfterDraw甚至不凸起? 回答 多亏了Kirk,这才是解决方案,它无需重新加载任何图层即可显示新添加的图形。 IGraphicsContainer con = _mapControl.Map as IGraphicsContainer; if (con != null) { IFillShapeElement fillShapeElement = new PolygonElementClass(); fillShapeElement.Symbol = fillSymbol; IElement element = (IElement)fillShapeElement; element.Geometry = feature.Shape; con.DeleteAllElements(); con.AddElement(element, 0); _mapControl.ActiveView.ScreenDisplay.Invalidate(feature.Extent, true, _mapControl.ActiveView.get_ScreenCacheID(esriViewDrawPhase.esriViewGraphics, null)); }