ArcGis Engine IIdentifyObj的hWnd无法实现的解决方法
在ArcGis Engine中闪烁元素会使用到IIdentifyObj的flash方法,遗憾的是在运行时环境下,该方法是无效的。
因为hWnd并没有在ArcGis运行时中得以实现,必须安装ArcGis Desktop。
故而要闪烁所选中的元素必须使用其他方式。
这是我们可以将IIdentifyObj转化成IFeature接口,然后调他的Shape属性来实现闪烁。例如
IFeature Feature = ((IRowIdentifyObject)pIdObj).Row as IFeature;
ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol();
pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
ISymbol pSymbol;
IRgbColor pRGBColor = new RgbColor();
pRGBColor.Blue = 128;
pMarkerSymbol.Color = pRGBColor;
pSymbol = (ISymbol)pMarkerSymbol;
pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
Control.ActiveView.ScreenDisplay.SetSymbol(pSymbol);
Control.FlashShape(Feature.Shape, 3, 200, pSymbol);
上面这个方法只是闪烁点的方法,同理可以闪烁面和线,请自行参考ArcGIS的样例
因为hWnd并没有在ArcGis运行时中得以实现,必须安装ArcGis Desktop。
故而要闪烁所选中的元素必须使用其他方式。
这是我们可以将IIdentifyObj转化成IFeature接口,然后调他的Shape属性来实现闪烁。例如
IFeature Feature = ((IRowIdentifyObject)pIdObj).Row as IFeature;
ISimpleMarkerSymbol pMarkerSymbol = new SimpleMarkerSymbol();
pMarkerSymbol.Style = esriSimpleMarkerStyle.esriSMSCircle;
ISymbol pSymbol;
IRgbColor pRGBColor = new RgbColor();
pRGBColor.Blue = 128;
pMarkerSymbol.Color = pRGBColor;
pSymbol = (ISymbol)pMarkerSymbol;
pSymbol.ROP2 = esriRasterOpCode.esriROPNotXOrPen;
Control.ActiveView.ScreenDisplay.SetSymbol(pSymbol);
Control.FlashShape(Feature.Shape, 3, 200, pSymbol);
上面这个方法只是闪烁点的方法,同理可以闪烁面和线,请自行参考ArcGIS的样例