MapControlEvents.cpp
// Copyright 2010 ESRI // // All rights reserved under the copyright laws of the United States // and applicable international laws, treaties, and conventions. // // You may freely redistribute and use this sample code, with or // without modification, provided you include the original copyright // notice and use restrictions. // // See the use restrictions. // #include "MapControlEvents.h" void MapControlEvents::OnAfterDraw(VARIANT display, long viewDrawPhase) { // If the foreground phase has drawn, viewDrawPhase will be 32 if (viewDrawPhase == 32) { // If a line object for splining text exists if (g_ipPolyline) { // Need at least 2 points in the line long points; g_ipPointCollection->get_PointCount(&points); if (points > 1) { ILineSymbolPtr ipLineSymbol(CLSID_SimpleLineSymbol); IRgbColorPtr ipColor(CLSID_RgbColor); ipColor->put_Red(0); ipColor->put_Green(0); ipColor->put_Blue(0); ipLineSymbol->put_Color(ipColor); ipLineSymbol->put_Width(2); // Create text symbol ITextSymbolPtr ipTextSymbol(CLSID_TextSymbol); // FONT SYMBOL NOT HERE YET ipTextSymbol->put_Color(ipColor); // Create text path and spline the text ITextPathPtr ipTextPath(CLSID_BezierTextPath); ISimpleTextSymbolPtr ipSimpleTextSymbol = ipTextSymbol; ipSimpleTextSymbol->putref_TextPath(ipTextPath); ipSimpleTextSymbol->put_Size(16); // Draw the line object IActiveViewPtr ipActive; g_ipMapControl->get_ActiveView(&ipActive); IScreenDisplayPtr ipScreen; ipActive->get_ScreenDisplay(&ipScreen); ipScreen->StartDrawing(0, esriNoScreenCache); ISymbolPtr ipSymbol = ipLineSymbol; ipScreen->SetSymbol(ipSymbol); ipScreen->DrawPolyline(g_ipPolyline); ipScreen->FinishDrawing(); // Spline the user text around the line ipScreen->StartDrawing(0, esriNoScreenCache); ipSymbol = ipSimpleTextSymbol; ipScreen->SetSymbol(ipSymbol); IGeometryPtr ipLineGeom = g_ipPolyline; char* towrite = XmTextFieldGetString(g_textBox); ipScreen->DrawText(ipLineGeom, CComBSTR(towrite)); } } } } void MapControlEvents::OnAfterScreenDraw(long hdc) { } void MapControlEvents::OnBeforeScreenDraw(long hdc) { } void MapControlEvents::OnDoubleClick(long button, long shift, long x, long y, double mapX, double mapY) { } void MapControlEvents::OnExtentUpdated(VARIANT displayTransformation, VARIANT_BOOL sizeChanged, VARIANT newEnvelope) { } void MapControlEvents::OnFullExtentUpdated(VARIANT displayTransformation, VARIANT newEnvelope) { } void MapControlEvents::OnKeyDown(long keyCode, long shift) { } void MapControlEvents::OnKeyUp(long keyCode, long shift) { } void MapControlEvents::OnMapReplaced(VARIANT newMap) { } void MapControlEvents::OnMouseDown(long button, long shift, long x, long y, double mapX,double mapY) { // If left hand mouse button, add a point if (button == 1) { // Create a point and grab hold of the IPoint interface IPointPtr ipPoint(CLSID_Point); ipPoint->put_X(mapX); ipPoint->put_Y(mapY); // If this is the first point of a new line, create the line if (!g_ipPolyline) g_ipPolyline = IPolylinePtr(CLSID_Polyline); g_ipPointCollection = g_ipPolyline; g_ipPointCollection->AddPoint(ipPoint); // Refresh the forground to remove any text annotation g_ipMapControl->Refresh(esriViewForeground); } else { // If right or middle button, zoom to user defined rectangle // Create an envelope and grab hold of IEnvelope interface IEnvelopePtr ipEnv = NULL; g_ipMapControl->TrackRectangle(&ipEnv); // If the user dragged a rectangle, set extent of map if (ipEnv) g_ipMapControl->put_Extent(ipEnv); } } void MapControlEvents::OnMouseMove(long button, long shift, long x, long y, double mapX, double mapY) { } void MapControlEvents::OnMouseUp(long button, long shift, long x, long y, double mapX, double mapY) { } void MapControlEvents::OnOleDrop(esriControlsDropAction dropAction, VARIANT dataObjectHelper, long* effect, long button, long shift, long x, long y) { } void MapControlEvents::OnSelectionChanged() { } void MapControlEvents::OnViewRefreshed(VARIANT ActiveView, long viewDrawPhase, VARIANT layerOrElement, VARIANT envelope) { }