AE 注记
1.通过IGeoFeatureLayer接口获取AnnotateLayerPropertiesCollection对象
IAnnotateLayerPropertiesCollectionPtr ipALyrPropColl;
ipGeoFeatureLayer->get_AnnotationProperties(&ipALyrPropColl);
if(ipALyrPropColl == NULL) return;
2.创建LabelEngineLayerProperties对象
2.1 LabelEngineLayerProperties由BasicOverposterLayerProperties组成
2.2 BasicOverposterLayerProperties由LineLabelPosition和LineLabelPlacement组成.
3.把LabelEngineLayerProperties对象添加到AnnotateLayerPropertiesCollection对象。
4.通过IGeoFeatureLayer接口设置标注可见。
void CWaveLayer::Anno(ILayerPtr ipFeatLyr, CString field)
{
HRESULT hr;
IGeoFeatureLayerPtr ipGeoFeatureLayer;
IFeatureLayerPtr ipFeatureLayer;
ipFeatLyr->QueryInterface(__uuidof(IFeatureLayer), (void**)&ipFeatureLayer);
if(ipFeatureLayer == NULL) return;
ipFeatureLayer->QueryInterface(__uuidof(IGeoFeatureLayer), (void**)&ipGeoFeatureLayer);
IAnnotateLayerPropertiesCollectionPtr ipALyrPropColl;
ipGeoFeatureLayer->get_AnnotationProperties(&ipALyrPropColl);
if(ipALyrPropColl == NULL) return;
ipALyrPropColl->Clear();
IAnnotateLayerPropertiesPtr ipAnnoLayerProps;
ILineLabelPositionPtr ipPosition;
ILineLabelPlacementPrioritiesPtr ipPlacement;
IBasicOverposterLayerPropertiesPtr ipBasic;
ILabelEngineLayerPropertiesPtr ipLabelEngine;
//标注的文字格式,注意
ITextSymbolPtr ipTextSyl;
ipTextSyl.CreateInstance(CLSID_TextSymbol);
//CFont* pFont = CFont::FromHandle((HFONT)GetStockObject(DEFAULT_GUI_FONT));
// //设置标注的字体
IFontPtr pFont(__uuidof(StdFont));;
pFont->put_Name((_bstr_t)"宋体");//字体集
//CY cy;
//cy.Hi = 50 * 72;
//cy.Lo = 40 * 72;
//pFont->put_Size(cy);
//pFont->put_Bold(FALSE);
//pFont->put_Weight(24);
ipTextSyl->put_Font((IFontDispPtr)pFont) ;
IColorPtr pColor;
ipTextSyl->get_Color(&pColor);
hr=pColor->put_RGB(RGB(0,120,0));//深绿色
if(FAILED(hr)) return;
hr = ipPosition.CreateInstance(CLSID_LineLabelPosition);
if(FAILED(hr)) return;
ipPosition->put_Parallel(VARIANT_TRUE);
ipPosition->put_Perpendicular(VARIANT_FALSE);
hr = ipPlacement.CreateInstance(CLSID_LineLabelPlacementPriorities);
if(FAILED(hr)) return;
hr = ipBasic.CreateInstance(CLSID_BasicOverposterLayerProperties);
if(FAILED(hr)) return;
hr = ipBasic->put_FeatureType(esriOverposterPolyline);
if(FAILED(hr)) return;
ipBasic->put_LineLabelPlacementPriorities(ipPlacement);
ipBasic->put_LineLabelPosition(ipPosition);
hr = ipLabelEngine.CreateInstance(CLSID_LabelEngineLayerProperties);
if(FAILED(hr)) return;
ipLabelEngine->putref_Symbol(ipTextSyl);
ipLabelEngine->putref_BasicOverposterLayerProperties(ipBasic);
ipLabelEngine->put_Expression((_bstr_t)"[Heiht]");
ipLabelEngine->QueryInterface(__uuidof(IAnnotateLayerProperties), (void**)&ipAnnoLayerProps);
if(ipAnnoLayerProps == NULL) return;
ipALyrPropColl->Add(ipAnnoLayerProps);
ipGeoFeatureLayer->put_DisplayAnnotation(VARIANT_TRUE);
}