Step 1:
pPoint.CreateInstance(__uuidof(Point));
pPoint->PutX(pEnvelop->GetXMax()-2.5);
pPoint->PutY(pEnvelop->GetYMax()-3.5);
IUIDPtr pUID;
pUID.CreateInstance(__uuidof(UID));
varVal=L"esriCarto.MarkerNorthArrow";
pUID->PutValue(varVal);
pElementExtent.CreateInstance(__uuidof(Envelope));
pElementExtent->PutCoords(pPoint->GetX(),pPoint->GetY(),pPoint->GetX()+2,pPoint->GetY()+2);
pMapSurround = CreateSurround(pUID, pElementExtent, "North Arrow", pMap, m_pPageLayoutControl->GetPageLayout());
pMarkerNorthArrow=pMapSurround;
//ESRI North -- 字体文件 117 是改文件中指北针的Unicode编码
pSymbol=MakeNorthArrowSymbol(177,"ESRI North");
if(pSymbol)
pMarkerNorthArrow->PutMarkerSymbol((IMarkerSymbolPtr)pSymbol);
pPoint=NULL;
pUID=NULL;
pElementExtent=NULL;
step 2:
IMapSurroundPtr CMapMakeLayoutHelper::CreateSurround(IUIDPtr pID,IEnvelopePtr pEnv,CString strName,IMapPtr pMap,IPageLayoutPtr pPagelayout)
{
IGraphicsContainerPtr pGraphicsContainer;
IMapFramePtr pMapFrame;
IElementPtr pElement;
IElementPropertiesPtr pElementProperties;
IActiveViewPtr pActiveView;
ITrackCancelPtr PTrack;
IMapSurroundFramePtr pMapSurroundFrame;
pGraphicsContainer=pPagelayout;
_variant_t vt(pMap, true);
pMapFrame=pGraphicsContainer->FindFrame(vt);
pMapSurroundFrame=pMapFrame->CreateSurroundFrame(pID,NULL);
pMapSurroundFrame->GetMapSurround()->PutName(_bstr_t(strName));
pElement=pMapSurroundFrame;
pElementProperties=pElement;
pElementProperties->PutName(_bstr_t("North Arrow"));
pActiveView=pPagelayout;
pElement->PutGeometry(pEnv);
pElement->Activate(pActiveView->GetScreenDisplay());
PTrack.CreateInstance(__uuidof(CancelTracker));
pElement->Draw(pActiveView->GetScreenDisplay(),PTrack);
pGraphicsContainer->AddElement(pElement,0);
pElement->PutGeometry(pEnv);
return pMapSurroundFrame->GetMapSurround();
}
Step 3:
ISymbolPtr CMapMakeLayoutHelper::MakeNorthArrowSymbol(int intStyle,CString sSymName)
{
ICharacterMarkerSymbolPtr pCharSym;
pCharSym.CreateInstance(__uuidof(CharacterMarkerSymbol));
IRgbColorPtr pRgbColor(__uuidof(RgbColor));
pRgbColor->PutRed(0);
pRgbColor->PutGreen(0);
pRgbColor->PutBlue(0);
IFontPtr pFont(CLSID_StdFont);
pFont->put_Name((_bstr_t)sSymName);
pCharSym->PutColor(pRgbColor);
pCharSym->PutSize(100);
pCharSym->PutCharacterIndex(intStyle);
pCharSym->PutFont(IFontDispPtr(pFont));
return pCharSym;
}