当前位置: 代码迷 >> GIS >> Add 地图 surrounds using the SymbologyControl
  详细解决方案

Add 地图 surrounds using the SymbologyControl

热度:451   发布时间:2016-05-05 06:05:01.0
Add map surrounds using the SymbologyControl
/ 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 at <your ArcGIS install location>/DeveloperKit10.0/userestrictions.txt.// using System;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Controls;using ESRI.ArcGIS.Display;using ESRI.ArcGIS.Geometry;using ESRI.ArcGIS.ADF.BaseClasses;using ESRI.ArcGIS.ADF.CATIDs;using System.Runtime.InteropServices;namespace AddMapSurrounds{  [ClassInterface(ClassInterfaceType.None)]  [Guid("5175B831-F18E-4cff-A016-146A7923681D")]  publicsealedclass CreateNorthArrow : BaseTool  {    private IHookHelper m_HookHelper;     private INewEnvelopeFeedback m_Feedback;    private IPoint m_Point;     privatebool m_InUse;    //Windows API functions to capture mouse and keyboard//input to a window when the mouse is outside the window    [DllImport("User32", CharSet=CharSet.Auto)]    privatestaticexternint SetCapture(int hWnd);    [DllImport("User32", CharSet=CharSet.Auto)]    privatestaticexternint GetCapture();    [DllImport("User32", CharSet=CharSet.Auto)]    privatestaticexternint ReleaseCapture();    #region Component Category Registration    [ComRegisterFunction()]    [ComVisible(false)]    staticvoid RegisterFunction(String sKey)    {      ControlsCommands.Register(sKey);    }    [ComUnregisterFunction()]    [ComVisible(false)]    staticvoid UnregisterFunction(String sKey)    {       ControlsCommands.Unregister(sKey);    }    #endregionpublic CreateNorthArrow()    {      //Create an IHookHelper object      m_HookHelper = new HookHelperClass();      //Set the tool propertiesbase.m_bitmap = new System.Drawing.Bitmap(GetType().Assembly.GetManifestResourceStream(GetType(), "NorthArrow.bmp"));      base.m_caption = "NorthArrow";      base.m_category = "myCustomCommands(C#)";      base.m_message = "Add a north arrow map surround";      base.m_name = "myCustomCommands(C#)_NorthArrow";      base.m_toolTip = "Add a north arrow";      base.m_deactivate = true;    }      publicoverridevoid OnCreate(object hook)    {      m_HookHelper.Hook = hook;    }      publicoverridevoid OnMouseDown(int Button, int Shift, int X, int Y)    {      //Create a point in map coordinates      m_Point = m_HookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y);      //Start capturing mouse events      SetCapture(m_HookHelper.ActiveView.ScreenDisplay.hWnd);      m_InUse = true;        }      publicoverridevoid OnMouseMove(int Button, int Shift, int X, int Y)    {      if (m_InUse == false) return;      //Start an envelope feedbackif (m_Feedback == null )      {        m_Feedback = new NewEnvelopeFeedbackClass();        m_Feedback.Display = m_HookHelper.ActiveView.ScreenDisplay;        m_Feedback.Start(m_Point);      }      //Move the envelope feedback      m_Feedback.MoveTo(m_HookHelper.ActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X, Y));    }      publicoverridevoid OnMouseUp(int Button, int Shift, int X, int Y)    {      if (m_InUse == false) return;      //Stop capturing mouse eventsif (GetCapture() == m_HookHelper.ActiveView.ScreenDisplay.hWnd)        ReleaseCapture();      //If an envelope has not been tracked or its height/width is 0if (m_Feedback == null)      {        m_Feedback = null;        m_InUse = false;        return;      }      IEnvelope envelope = m_Feedback.Stop();      if ((envelope.IsEmpty) || (envelope.Width == 0) || (envelope.Height == 0))      {        m_Feedback = null;        m_InUse = false;        return;      }      //Create the form with the SymbologyControl      SymbolForm symbolForm = new SymbolForm();      //Get the IStyleGalleryItem      IStyleGalleryItem styleGalleryItem = symbolForm.GetItem(esriSymbologyStyleClass.esriStyleClassNorthArrows);      //Release the form      symbolForm.Dispose();      if (styleGalleryItem == null) return;      //Get the map frame of the focus map      IMapFrame mapFrame = (IMapFrame) m_HookHelper.ActiveView.GraphicsContainer.FindFrame(m_HookHelper.ActiveView.FocusMap);      //Create a map surround frame      IMapSurroundFrame mapSurroundFrame = new MapSurroundFrameClass();       //Set its map frame and map surround      mapSurroundFrame.MapFrame = mapFrame;      mapSurroundFrame.MapSurround = (IMapSurround) styleGalleryItem.Item;      //QI to IElement and set its geometry      IElement element = (IElement) mapSurroundFrame;      element.Geometry = envelope;      //Add the element to the graphics container      m_HookHelper.ActiveView.GraphicsContainer.AddElement((IElement)mapSurroundFrame, 0);      //Refresh      m_HookHelper.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, mapSurroundFrame, null);      m_Feedback = null;      m_InUse = false;    }  }}