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