我在单击按钮时绘制了一个多边形以突出显示一个特征。然后,我需要刷新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));
}
esriScreenCache.esriNoScreenCache
),因此根本不需要刷新。实际上,刷新会导致图形消失。你试过了PartialRefresh
吗?
esriViewAll
我有用。