在ArcGIS Engine中,如果要调用ESRI自带符号库中的一个符号,比如图中的ColorRamp:
可以利用以下代码来得到:
IStyleGallery pSG=new ServerStyleGalleryClass();
pSG.ImportStyle(“ESRI.ServerStyle”);
IEnumStyleGalleryItem pESGI = pSG.get_Items(“Color Ramps”, null, null);
IStyleGalleryItem pSGI=pESGI.Next();
while(pSGI!=null)
{
if(“Pastels”==pSGI.Name)//pastels是该colorramp的名字
break;
pSGI=pESGI.Next();
}
IColorRamp pColorRamp=pSGI.Item as IColorRamp;
…
但在AGS中发现,执行完IStyleGalleryItem pSGI=PESGI.Next();后,pSGI始终为null,但pSG.ClassCount却为22,表明已经导入了符号库文件,原因后面。但pSG.get_Items()方法执行时也不报错,且在engine下都没有问题……最后发现,在pSG.get_Items()之后,pESGI.Next();之前,插入一句pESGI.Reset()问题就解决了,比较无厘头。
IStyleGallery pSG=new ServerStyleGalleryClass();
pSG.ImportStyle(“ESRI.ServerStyle”);
IEnumStyleGalleryItem pESGI = pSG.get_Items(“Color Ramps”, null, null);
IStyleGalleryItem pSGI=pESGI.Next();
while(pSGI!=null)
{
if(“Pastels”==pSGI.Name)//pastels是该colorramp的名字
break;
pSGI=pESGI.Next();
}
IColorRamp pColorRamp=pSGI.Item as IColorRamp;
…
但在AGS中发现,执行完IStyleGalleryItem pSGI=PESGI.Next();后,pSGI始终为null,但pSG.ClassCount却为22,表明已经导入了符号库文件,原因后面。但pSG.get_Items()方法执行时也不报错,且在engine下都没有问题……最后发现,在pSG.get_Items()之后,pESGI.Next();之前,插入一句pESGI.Reset()问题就解决了,比较无厘头。