类型一:AE:IUniqueValueRendererPtr 实现图层唯一值渲染
IGeoFeatureLayerPtr pGeoFeaLyr;
CString sFldName = _T("FWID");//列名
IMapControl2Ptr pMapControl;
pMapControl=m_MapCtrl.get_Object();
pGeoFeaLyr=pMapControl->GetLayer(0);//层索引
if(pGeoFeaLyr == NULL) return;
IQueryFilterPtr pFilter(__uuidof(QueryFilter));
IFeatureCursorPtr pFeaCur;
IFeatureClassPtr pFeaCls;
pGeoFeaLyr->get_FeatureClass(&pFeaCls);
if( pFeaCls == NULL) return;
pFeaCur = pFeaCls->Search(pFilter,FALSE);
if(pFeaCur == NULL) return;
IEnumColorsPtr pEnumColors;
IRandomColorRampPtr pRanColor(__uuidof(RandomColorRamp));
pRanColor->put_MinSaturation(20);
pRanColor->put_MaxSaturation(40);
pRanColor->put_MinValue(85);
pRanColor->put_MaxValue(100);
pRanColor->put_StartHue(76);
pRanColor->put_EndHue(188);
pRanColor->put_Size(100);
VARIANT_BOOL bOk;
pRanColor->CreateRamp(&bOk);
if(!bOk) return;
pRanColor->get_Colors(&pEnumColors);
if(pEnumColors == NULL) return;
IUniqueValueRendererPtr pUniRender(__uuidof(UniqueValueRenderer));
pUniRender->put_FieldCount(1);
pUniRender->put_Field(0,(_bstr_t)sFldName);
IColorPtr pColor(__uuidof(RgbColor));
pColor->put_RGB(RGB(255,0,0));
ISimpleLineSymbolPtr pSimLineSym;
pSimLineSym.CreateInstance(__uuidof(SimpleLineSymbol));
pSimLineSym->put_Color(pColor);
pSimLineSym->put_Width(0.8);
pSimLineSym->put_Style(esriSLSDash);
IFeaturePtr pFeature = pFeaCur->NextFeature();
while ( pFeature != NULL)
{
VARIANT var;
pFeature->get_Value(2,&var);//列索引
if(var.bstrVal == (BSTR)"") continue;
long nValueCount;
pUniRender->get_ValueCount(&nValueCount);
IColorPtr pTmpColor;
pTmpColor = pEnumColors->Next();
OLE_COLOR rgb;
pTmpColor->get_RGB(&rgb);
if (pTmpColor == NULL)
{
pEnumColors->Reset();
pTmpColor = pEnumColors->Next();
}
ISimpleFillSymbolPtr pSimFillSym(__uuidof(SimpleFillSymbol));
ISymbolPtr pSymbol;
pSimFillSym->put_Color(pTmpColor);
pSimFillSym->PutOutline(pSimLineSym);
pSymbol=pSimFillSym;
pUniRender->AddValue((_bstr_t)var,(_bstr_t)var,pSymbol);
pUniRender->put_Label(_bstr_t("Parcels"));
pFeature = pFeaCur->NextFeature();
}
IFeatureRendererPtr pFeaRender = (IFeatureRendererPtr)pUniRender;
pGeoFeaLyr->putref_Renderer(pFeaRender);
IActiveViewPtr pAV;
pAV=pMapControl->GetActiveView();
pAV->Refresh();