ArcObjects Library Reference  

MapViewer

About the Building a MapViewer application using the ArcGIS Engine controls Sample

[C#]

MapViewer.cs

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Windows.Forms;
using ESRI.ArcGIS.Carto;
using ESRI.ArcGIS.Controls;
using ESRI.ArcGIS.Display;
using ESRI.ArcGIS.Geometry;
using ESRI.ArcGIS.SystemUI;
using ESRI.ArcGIS.esriSystem;

namespace Controls
{
    public partial class MapViewer : Form
    {
        //The popup menu
        private IToolbarMenu m_ToolbarMenu; 
        //The envelope drawn on the MapControl
        private IEnvelope m_Envelope;
        //The symbol used to draw the envelope on the MapControl
        private Object m_FillSymbol;
        //The PageLayoutControl's focus map events 
        private ITransformEvents_Event m_transformEvents;
        private ITransformEvents_VisibleBoundsUpdatedEventHandler visBoundsUpdatedE;
        //The CustomizeDialog used by the ToolbarControl
        private ICustomizeDialog m_CustomizeDialog; 
        //The CustomizeDialog start event
        private ICustomizeDialogEvents_OnStartDialogEventHandler startDialogE;
        //The CustomizeDialog close event 
        private ICustomizeDialogEvents_OnCloseDialogEventHandler closeDialogE;

        public MapViewer()
        {
            InitializeComponent();
        }

        private void MapViewer_Load(object sender, EventArgs e)
        {
            //Create the customize dialog for the ToolbarControl
            CreateCustomizeDialog();

            //Create symbol used on the MapControl
            CreateOverviewSymbol();

            //Set label editing to manual
            axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;

            //Get file name used to persist the ToolbarControl  
            String filePath = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("Controls.exe", "") + @"\PersistedItems.txt";
            if (System.IO.File.Exists(filePath))
                LoadToolbarControlItems(filePath);
            else
            {
                //Add generic commands
                axToolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsAddDataCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                //Add page layout navigation commands
                axToolbarControl1.AddItem("esriControls.ControlsPageZoomInTool", -1, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsPageZoomOutTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsPagePanTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsPageZoomWholePageCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                //Add map navigation commands
                axToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool", -1, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapPanTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentBackCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentForwardCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                //Add map inquiry commands
                axToolbarControl1.AddItem("esriControls.ControlsMapIdentifyTool", -1, -1, true, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapFindCommand", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                axToolbarControl1.AddItem("esriControls.ControlsMapMeasureTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
                //Add custom AddDateTool
                axToolbarControl1.AddItem("Commands.AddDateTool", -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconAndText);

                //Create a new ToolbarPalette
                IToolbarPalette toolbarPalette = new ToolbarPaletteClass();
                //Add commands and tools to the ToolbarPalette
                toolbarPalette.AddItem("esriControls.ControlsNewMarkerTool", -1, -1);
                toolbarPalette.AddItem("esriControls.ControlsNewLineTool", -1, -1);
                toolbarPalette.AddItem("esriControls.ControlsNewCircleTool", -1, -1);
                toolbarPalette.AddItem("esriControls.ControlsNewEllipseTool", -1, -1);
                toolbarPalette.AddItem("esriControls.ControlsNewRectangleTool", -1, -1);
                toolbarPalette.AddItem("esriControls.ControlsNewPolygonTool", -1, -1);
                //Add the ToolbarPalette to the ToolbarControl
                axToolbarControl1.AddItem(toolbarPalette, 0, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);
            }

            //Create a new ToolbarMenu
            m_ToolbarMenu = new ToolbarMenuClass();
            //Share the ToolbarControl's command pool
            m_ToolbarMenu.CommandPool = axToolbarControl1.CommandPool;
            //Set the hook to the PageLayoutControl
            m_ToolbarMenu.SetHook(axPageLayoutControl1);
            //Add commands to the ToolbarMenu
            m_ToolbarMenu.AddItem("esriControls.ControlsPageZoomInFixedCommand", -1, -1,false,esriCommandStyles.esriCommandStyleIconAndText);
            m_ToolbarMenu.AddItem("esriControls.ControlsPageZoomOutFixedCommand", -1, -1, false, esriCommandStyles.esriCommandStyleIconAndText);
            m_ToolbarMenu.AddItem("esriControls.ControlsPageZoomWholePageCommand", -1, -1, false, esriCommandStyles.esriCommandStyleIconAndText);
            m_ToolbarMenu.AddItem("esriControls.ControlsPageZoomPageToLastExtentBackCommand", -1, -1, true, esriCommandStyles.esriCommandStyleIconAndText);
            m_ToolbarMenu.AddItem("esriControls.ControlsPageZoomPageToLastExtentForwardCommand", -1, -1, false, esriCommandStyles.esriCommandStyleIconAndText);

            //Set buddy controls
            axTOCControl1.SetBuddyControl(axPageLayoutControl1);
            axToolbarControl1.SetBuddyControl(axPageLayoutControl1);

            //Load a pre-authored map document into the PageLayoutControl using relative paths
            string fileName = @"..\..\..\..\data\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd";
            if (axPageLayoutControl1.CheckMxFile(fileName))
                axPageLayoutControl1.LoadMxFile(fileName, "");
        }

        private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, IPageLayoutControlEvents_OnPageLayoutReplacedEvent e)
        {
            //Get the IActiveView of the focus map in the PageLayoutControl
            IActiveView activeView = axPageLayoutControl1.ActiveView.FocusMap as IActiveView;
            //Trap the ITranformEvents of the PageLayoutCntrol's focus map 
            visBoundsUpdatedE = new ITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);
            IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation;
            //Start listening to the transform events interface
            m_transformEvents = (ITransformEvents_Event) displayTransformation;
            //Start listening to the VisibleBoundsUpdated method on ITransformEvents interface
            m_transformEvents.VisibleBoundsUpdated += visBoundsUpdatedE;
            //Get the extent of the focus map
            m_Envelope = activeView.Extent;

            //Load the same pre-authored map document into the MapControl
            axMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename, null, null);
            //Set the extent of the MapControl to the full extent of the data
            axMapControl1.Extent = axMapControl1.FullExtent;
        }

        private void MapViewer_ResizeBegin(object sender, EventArgs e)
        {
            //Suppress data redraw and draw bitmap instead
            axMapControl1.SuppressResizeDrawing(true, 0);
            axPageLayoutControl1.SuppressResizeDrawing(true, 0);
        }

        private void MapViewer_ResizeEnd(object sender, EventArgs e)
        {
            //Stop bitmap draw and draw data
            axMapControl1.SuppressResizeDrawing(false, 0);
            axPageLayoutControl1.SuppressResizeDrawing(false, 0);
        }

        private void axPageLayoutControl1_OnMouseDown(object sender, IPageLayoutControlEvents_OnMouseDownEvent e)
        {
            //Popup the ToolbarMenu
            if (e.button == 2)
                m_ToolbarMenu.PopupMenu(e.x, e.y, axPageLayoutControl1.hWnd);
        }

        private void axTOCControl1_OnEndLabelEdit(object sender, ITOCControlEvents_OnEndLabelEditEvent e)
        {
            //If the new label is an empty string then prevent the edit
            if (e.newLabel.Trim() == "") e.canEdit = false;
        }

        private void CreateOverviewSymbol()
        {
            //Get the IRGBColor interface
            IRgbColor color = new RgbColorClass();
            //Set the color properties
            color.RGB = 255;
            //Get the ILine symbol interface
            ILineSymbol outline = new SimpleLineSymbolClass();
            //Set the line symbol properties
            outline.Width = 1.5;
            outline.Color = color;
            //Get the IFillSymbol interface
            ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();
            //Set the fill symbol properties
            simpleFillSymbol.Outline = outline;
            simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;
            m_FillSymbol = simpleFillSymbol;
        }

        private void OnVisibleBoundsUpdated(IDisplayTransformation sender, bool sizeChanged)
        {
            //Set the extent to the new visible extent
            m_Envelope = sender.VisibleBounds;
            //Refresh the MapControl's foreground phase
            axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, null, null);
        }

        private void axMapControl1_OnAfterDraw(object sender, IMapControlEvents2_OnAfterDrawEvent e)
        {
            if (m_Envelope == null) return;

            //If the foreground phase has drawn      
            esriViewDrawPhase viewDrawPhase = (esriViewDrawPhase)e.viewDrawPhase;
            if (viewDrawPhase == esriViewDrawPhase.esriViewForeground)
            {
                IGeometry geometry = m_Envelope;
                axMapControl1.DrawShape(geometry, ref m_FillSymbol);
            }
        }

        private void CreateCustomizeDialog()
        {
            //Create new customize dialog 
            m_CustomizeDialog = new CustomizeDialogClass();
            //Set the title
            m_CustomizeDialog.DialogTitle = "Customize ToolbarControl Items";
            //Show the 'Add from File' button
            m_CustomizeDialog.ShowAddFromFile = true;
            //Set the ToolbarControl that new items will be added to
            m_CustomizeDialog.SetDoubleClickDestination(axToolbarControl1);

            //Set the customize dialog events 
            startDialogE = new ICustomizeDialogEvents_OnStartDialogEventHandler(OnStartDialog);
            ((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnStartDialog += startDialogE;
            closeDialogE = new ICustomizeDialogEvents_OnCloseDialogEventHandler(OnCloseDialog);
            ((ICustomizeDialogEvents_Event)m_CustomizeDialog).OnCloseDialog += closeDialogE;
        }

        private void chkCustomize_CheckedChanged(object sender, EventArgs e)
        {
            //Show or hide the customize dialog
            if (chkCustomize.Checked == false)
                m_CustomizeDialog.CloseDialog();
            else
                m_CustomizeDialog.StartDialog(axToolbarControl1.hWnd);
        }

        private void OnStartDialog()
        {
            axToolbarControl1.Customize = true;
        }

        private void OnCloseDialog()
        {
            axToolbarControl1.Customize = false;
            chkCustomize.Checked = false;
        }

        private void SaveToolbarControlItems(string filePath)
        {
            //Create a MemoryBlobStream
            IBlobStream blobStream = new MemoryBlobStreamClass(); 
            //Get the IStream interface
            IStream stream = blobStream; 

            //Save the ToolbarControl into the stream
            axToolbarControl1.SaveItems(stream);
            //Save the stream to a file
            blobStream.SaveToFile(filePath);
        }

        private void LoadToolbarControlItems(string filePath)
        {   
            //Create a MemoryBlobStream
            IBlobStream blobStream = new MemoryBlobStreamClass();
            //Get the IStream interface
            IStream stream = blobStream;

            //Load the stream from the file
            blobStream.LoadFromFile(filePath);
            //Load the stream into the ToolbarControl
            axToolbarControl1.LoadItems(stream);
        }

        private void MapViewer_FormClosing(object sender, FormClosingEventArgs e)
        {
            //Get file name to persist the ToolbarControl 
            String filePath = System.Reflection.Assembly.GetExecutingAssembly().Location.Replace("Controls.exe", "") + @"\PersistedItems.txt";
            //Persist ToolbarControl contents
            SaveToolbarControlItems(filePath);
        }

        private void printToolStripMenuItem_Click(object sender, EventArgs e)
        {
            //Exit if there is no system default printer
            if (axPageLayoutControl1.Printer == null)
            {
                MessageBox.Show("Unable to print!", "No default printer");
                return;
            }

            //Set printer papers orientation to that of the Page
            axPageLayoutControl1.Printer.Paper.Orientation = axPageLayoutControl1.Page.Orientation;
            //Scale to the page
            axPageLayoutControl1.Page.PageToPrinterMapping = esriPageToPrinterMapping.esriPageMappingScale;
            //Send the pagelayout to the printer
            axPageLayoutControl1.PrintPageLayout();
        }

    }
}
[Visual Basic .NET]

MapViewer.vb

Imports ESRI.ArcGIS.Carto
Imports ESRI.ArcGIS.Controls
Imports ESRI.ArcGIS.Display
Imports ESRI.ArcGIS.Geometry
Imports ESRI.ArcGIS.SystemUI
Imports ESRI.ArcGIS.esriSystem
Imports ESRI.ArcGIS




Public Class MapViewer
    'The popup menu
    Private m_pToolbarMenu As IToolbarMenu
    'The envelope drawn on the MapControl
    Private m_pEnvelope As IEnvelope
    'The symbol used to draw the envelope on the MapControl
    Private m_pFillSymbol As ISimpleFillSymbol
    'The PageLayoutControl's focus map events 
    Private m_pTransformEvents As ITransformEvents_Event
    Private visBoundsUpdatedE As ITransformEvents_VisibleBoundsUpdatedEventHandler
    'The CustomizeDialog used by the ToolbarControl
    Private m_pCustomizeDialog As ICustomizeDialog
    'The CustomizeDialog start event
    Private startDialogE As ICustomizeDialogEvents_OnStartDialogEventHandler
    'The CustomizeDialog close event 
    Private closeDialogE As ICustomizeDialogEvents_OnCloseDialogEventHandler

    <STAThread()> _
    Shared Sub Main()

        'Load runtime 
        If Not RuntimeManager.Bind(ProductCode.Engine) Then
            If Not RuntimeManager.Bind(ProductCode.Desktop) Then
                MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down.")
                System.Environment.Exit(1) ' Force exit or other indication in the application
            End If
        End If

        Application.Run(New MapViewer())
    End Sub

    Private Sub MapViewer_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        'Create the customize dialog for the ToolbarControl
        CreateCustomizeDialog()

        'Create symbol used on the MapControl
        CreateOverviewSymbol()

        'Set label editing to manual
        AxTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual

        'Get file name used to persist the ToolbarControl 
        Dim filePath As String
        filePath = System.Reflection.Assembly.GetExecutingAssembly.Location.Replace("Controls.exe", "") & "\PersistedItems.txt"
        If System.IO.File.Exists(filePath) Then
            LoadToolbarControlItems(filePath)
        Else
            'Add generic commands
            AxToolbarControl1.AddItem("esriControls.ControlsOpenDocCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsAddDataCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            'Add page layout navigation commands
            AxToolbarControl1.AddItem("esriControls.ControlsPageZoomInTool", -1, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsPageZoomOutTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsPagePanTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsPageZoomWholePageCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            'Add map navigation commands
            AxToolbarControl1.AddItem("esriControls.ControlsMapZoomInTool", -1, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapZoomOutTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapPanTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapFullExtentCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentBackCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapZoomToLastExtentForwardCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            'Add map inquiry commands
            AxToolbarControl1.AddItem("esriControls.ControlsMapIdentifyTool", -1, -1, True, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapFindCommand", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            AxToolbarControl1.AddItem("esriControls.ControlsMapMeasureTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
            'Add custom AddDateTool
            AxToolbarControl1.AddItem("Commands.AddDateTool", -1, -1, False, 0, esriCommandStyles.esriCommandStyleIconAndText)

            'Create a new ToolbarPalette
            Dim pToolbarPalette As IToolbarPalette = New ToolbarPaletteClass()
            'Add commands and tools to the ToolbarPalette
            pToolbarPalette.AddItem("esriControls.ControlsNewMarkerTool", -1, -1)
            pToolbarPalette.AddItem("esriControls.ControlsNewLineTool", -1, -1)
            pToolbarPalette.AddItem("esriControls.ControlsNewCircleTool", -1, -1)
            pToolbarPalette.AddItem("esriControls.ControlsNewEllipseTool", -1, -1)
            pToolbarPalette.AddItem("esriControls.ControlsNewRectangleTool", -1, -1)
            pToolbarPalette.AddItem("esriControls.ControlsNewPolygonTool", -1, -1)
            'Add the ToolbarPalette to the ToolbarControl
            AxToolbarControl1.AddItem(pToolbarPalette, 0, -1, False, 0, esriCommandStyles.esriCommandStyleIconOnly)
        End If

        'Create a new ToolbarMenu
        m_pToolbarMenu = New ToolbarMenuClass()
        'Share the ToolbarControl's command pool
        m_pToolbarMenu.CommandPool = AxToolbarControl1.CommandPool
        'Set the hook to the PageLayoutControl
        m_pToolbarMenu.SetHook(AxPageLayoutControl1)
        'Add commands to the ToolbarMenu
        m_pToolbarMenu.AddItem("esriControls.ControlsPageZoomInFixedCommand", -1, -1, False, esriCommandStyles.esriCommandStyleIconAndText)
        m_pToolbarMenu.AddItem("esriControls.ControlsPageZoomOutFixedCommand", -1, -1, False, esriCommandStyles.esriCommandStyleIconAndText)
        m_pToolbarMenu.AddItem("esriControls.ControlsPageZoomWholePageCommand", -1, -1, False, esriCommandStyles.esriCommandStyleIconAndText)
        m_pToolbarMenu.AddItem("esriControls.ControlsPageZoomPageToLastExtentBackCommand", -1, -1, True, esriCommandStyles.esriCommandStyleIconAndText)
        m_pToolbarMenu.AddItem("esriControls.ControlsPageZoomPageToLastExtentForwardCommand", -1, -1, False, esriCommandStyles.esriCommandStyleIconAndText)

        'Set buddy controls
        AxTOCControl1.SetBuddyControl(AxPageLayoutControl1)
        AxToolbarControl1.SetBuddyControl(AxPageLayoutControl1)

        'Load a pre-authored map document into the PageLayoutControl using relative paths
        Dim sFileName As String = "..\..\..\..\data\GulfOfStLawrence\Gulf_of_St._Lawrence.mxd"
        If AxPageLayoutControl1.CheckMxFile(sFileName) Then
            AxPageLayoutControl1.LoadMxFile(sFileName)
        End If

    End Sub

    Private Sub AxPageLayoutControl1_OnPageLayoutReplaced(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnPageLayoutReplacedEvent) Handles AxPageLayoutControl1.OnPageLayoutReplaced
        'Get the IActiveView of the focus map in the PageLayoutControl
        Dim activeView As IActiveView = AxPageLayoutControl1.ActiveView.FocusMap
        'Trap the ITranformEvents of the PageLayoutCntrol's focus map 
        visBoundsUpdatedE = New ITransformEvents_VisibleBoundsUpdatedEventHandler(AddressOf OnVisibleBoundsUpdated)
        'Start listening to the transform events interface
        m_pTransformEvents = activeView.ScreenDisplay.DisplayTransformation
        'Start listening to the VisibleBoundsUpdated method on ITransformEvents interface
        AddHandler (m_pTransformEvents.VisibleBoundsUpdated), visBoundsUpdatedE
        'Get the extent of the focus map
        m_pEnvelope = activeView.Extent

        'Load the same pre-authored map document into the MapControl
        AxMapControl1.LoadMxFile(AxPageLayoutControl1.DocumentFilename)
        'Set the extent of the MapControl to the full extent of the data
        AxMapControl1.Extent = AxMapControl1.FullExtent
    End Sub

    Private Sub MapViewer_ResizeBegin(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeBegin
        'Suppress data redraw and draw bitmap instead
        AxMapControl1.SuppressResizeDrawing(True, 0)
        AxPageLayoutControl1.SuppressResizeDrawing(True, 0)
    End Sub

    Private Sub MapViewer_ResizeEnd(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.ResizeEnd
        'Stop bitmap draw and draw data
        AxMapControl1.SuppressResizeDrawing(False, 0)
        AxPageLayoutControl1.SuppressResizeDrawing(False, 0)
    End Sub

    Private Sub AxPageLayoutControl1_OnMouseDown(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnMouseDownEvent) Handles AxPageLayoutControl1.OnMouseDown
        'Popup the ToolbarMenu
        If e.button = 2 Then
            m_pToolbarMenu.PopupMenu(e.x, e.y, AxPageLayoutControl1.hWnd)
        End If
    End Sub

    Private Sub AxTOCControl1_OnEndLabelEdit(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.ITOCControlEvents_OnEndLabelEditEvent) Handles AxTOCControl1.OnEndLabelEdit
        'If the new label is an empty string then prevent the edit
        If e.newLabel.Trim = "" Then e.canEdit = False
    End Sub

    Private Sub CreateOverviewSymbol()
        'Get the IRGBColor interface
        Dim pColor As IRgbColor
        pColor = New RgbColorClass
        'Set the color properties
        pColor.RGB = RGB(255, 0, 0)
        'Get the ILine symbol interface
        Dim pOutline As ILineSymbol
        pOutline = New SimpleLineSymbolClass
        'Set the line symbol properties
        pOutline.Width = 1.5
        pOutline.Color = pColor
        'Get the ISimpleFillSymbol interface
        m_pFillSymbol = New SimpleFillSymbolClass
        'Set the fill symbol properties
        m_pFillSymbol.Outline = pOutline
        m_pFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow
    End Sub

    Private Sub OnVisibleBoundsUpdated(ByVal sender As IDisplayTransformation, ByVal sizeChanged As Boolean)
        'Set the extent to the new visible extent
        m_pEnvelope = sender.VisibleBounds
        'Refresh the MapControl's foreground phase
        AxMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase.esriViewForeground, Nothing, Nothing)
    End Sub

    Private Sub AxMapControl1_OnAfterDraw(ByVal sender As System.Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterDrawEvent) Handles AxMapControl1.OnAfterDraw
        If m_pEnvelope Is Nothing Then Exit Sub

        'If the foreground phase has drawn
        Dim pViewDrawPhase As esriViewDrawPhase
        pViewDrawPhase = e.viewDrawPhase
        If pViewDrawPhase = esriViewDrawPhase.esriViewForeground Then
            'Draw the shape on the MapControl
            AxMapControl1.DrawShape(m_pEnvelope, m_pFillSymbol)
        End If
    End Sub

    Private Sub CreateCustomizeDialog()
        'Create new customize dialog 
        m_pCustomizeDialog = New CustomizeDialogClass()
        'Set the title
        m_pCustomizeDialog.DialogTitle = "Customize ToolbarControl Items"
        'Show the 'Add from File' button
        m_pCustomizeDialog.ShowAddFromFile = True
        'Set the ToolbarControl that new items will be added to
        m_pCustomizeDialog.SetDoubleClickDestination(AxToolbarControl1)

        'Set the customize dialog events 
        startDialogE = New ICustomizeDialogEvents_OnStartDialogEventHandler(AddressOf OnStartDialog)
        AddHandler CType(m_pCustomizeDialog, ICustomizeDialogEvents_Event).OnStartDialog, startDialogE
        closeDialogE = New ICustomizeDialogEvents_OnCloseDialogEventHandler(AddressOf OnCloseDialog)
        AddHandler CType(m_pCustomizeDialog, ICustomizeDialogEvents_Event).OnCloseDialog, closeDialogE
    End Sub

    Private Sub chkCustomize_CheckedChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles chkCustomize.CheckedChanged
        'Show or hide the customize dialog
        If chkCustomize.Checked = False Then
            m_pCustomizeDialog.CloseDialog()
        Else
            m_pCustomizeDialog.StartDialog(AxToolbarControl1.hWnd)
        End If
    End Sub

    Private Sub OnStartDialog()
        AxToolbarControl1.Customize = True
    End Sub

    Private Sub OnCloseDialog()
        AxToolbarControl1.Customize = False
        chkCustomize.Checked = False
    End Sub

    Private Sub SaveToolbarControlItems(ByVal filePath)
        'Create a MemoryBlobStream
        Dim blobStream As IBlobStream
        blobStream = New MemoryBlobStreamClass
        'Get the IStream interface
        Dim stream As IStream
        stream = blobStream

        'Save the ToolbarControl into the stream
        AxToolbarControl1.SaveItems(stream)
        'Save the stream to a file
        blobStream.SaveToFile(filePath)
    End Sub

    Private Sub LoadToolbarControlItems(ByVal filePath)
        'Create a MemoryBlobStream
        Dim blobStream As IBlobStream
        blobStream = New MemoryBlobStreamClass
        'Get the IStream interface
        Dim stream As IStream
        stream = blobStream

        'Load the stream from the file
        blobStream.LoadFromFile(filePath)
        'Load the stream into the ToolbarControl
        AxToolbarControl1.LoadItems(stream)
    End Sub

    Private Sub MapViewer_FormClosing(ByVal sender As System.Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles MyBase.FormClosing
        'Get file name to persist the ToolbarControl 
        Dim filePath As String
        filePath = System.Reflection.Assembly.GetExecutingAssembly.Location.Replace("Controls.exe", "") & "\PersistedItems.txt"
        'Persist ToolbarControl contents
        SaveToolbarControlItems(filePath)
    End Sub

    Private Sub PrintToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles PrintToolStripMenuItem.Click
        'Exit if there is no system default printer
        If AxPageLayoutControl1.Printer Is Nothing Then
            MessageBox.Show("Unable to print!", "No default printer")
            Exit Sub
        End If

        'Set printer papers orientation to that of the Page
        AxPageLayoutControl1.Printer.Paper.Orientation = AxPageLayoutControl1.Page.Orientation
        'Scale to the page
        AxPageLayoutControl1.Page.PageToPrinterMapping = esriPageToPrinterMapping.esriPageMappingScale
        'Send the pagelayout to the printer
        AxPageLayoutControl1.PrintPageLayout()
    End Sub

End Class