About the Copy the PageLayoutControl focus map and overwrite the MapControl map Sample
[C#]
CopyFocusMap.cs
using System; using System.Windows.Forms; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display; using ESRI.ArcGIS.esriSystem; using ESRI.ArcGIS.SystemUI; using ESRI.ArcGIS.Controls; using ESRI.ArcGIS; namespace CopyFocusMap { /// <summary> /// Summary description for Form1. /// </summary> public class Form1 : System.Windows.Forms.Form { public System.Windows.Forms.ComboBox cboMaps; public System.Windows.Forms.TextBox txbPath; public System.Windows.Forms.Button cmdLoad; public System.Windows.Forms.Label Label4; public System.Windows.Forms.Button cmdZoomPage; public System.Windows.Forms.Button cmdFullExtent; public System.Windows.Forms.Label Label2; public System.Windows.Forms.Label Label1; private bool m_bUpdateFocusMap; private bool m_bReplacedPageLayout; private System.Windows.Forms.OpenFileDialog openFileDialog1; private ESRI.ArcGIS.Controls.AxPageLayoutControl axPageLayoutControl1; private ESRI.ArcGIS.Controls.AxMapControl axMapControl1; private ESRI.ArcGIS.Controls.AxLicenseControl axLicenseControl1; /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.Container components = null; public Form1() { // // Required for Windows Form Designer support // InitializeComponent(); // // TODO: Add any constructor code after InitializeComponent call // } /// <summary> /// Clean up any resources being used. /// </summary> protected override void Dispose( bool disposing ) { //Release COM objects ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown(); if( disposing ) { if (components != null) { components.Dispose(); } } base.Dispose( disposing ); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(Form1)); this.cboMaps = new System.Windows.Forms.ComboBox(); this.txbPath = new System.Windows.Forms.TextBox(); this.cmdLoad = new System.Windows.Forms.Button(); this.Label4 = new System.Windows.Forms.Label(); this.cmdZoomPage = new System.Windows.Forms.Button(); this.cmdFullExtent = new System.Windows.Forms.Button(); this.Label2 = new System.Windows.Forms.Label(); this.Label1 = new System.Windows.Forms.Label(); this.openFileDialog1 = new System.Windows.Forms.OpenFileDialog(); this.axPageLayoutControl1 = new ESRI.ArcGIS.Controls.AxPageLayoutControl(); this.axMapControl1 = new ESRI.ArcGIS.Controls.AxMapControl(); this.axLicenseControl1 = new ESRI.ArcGIS.Controls.AxLicenseControl(); ((System.ComponentModel.ISupportInitialize)(this.axPageLayoutControl1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).BeginInit(); ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).BeginInit(); this.SuspendLayout(); // // cboMaps // this.cboMaps.BackColor = System.Drawing.SystemColors.Window; this.cboMaps.Cursor = System.Windows.Forms.Cursors.Default; this.cboMaps.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.cboMaps.ForeColor = System.Drawing.SystemColors.WindowText; this.cboMaps.Location = new System.Drawing.Point(72, 48); this.cboMaps.Name = "cboMaps"; this.cboMaps.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cboMaps.Size = new System.Drawing.Size(161, 22); this.cboMaps.TabIndex = 11; this.cboMaps.SelectedIndexChanged += new System.EventHandler(this.cboMaps_SelectedIndexChanged); // // txbPath // this.txbPath.AcceptsReturn = true; this.txbPath.AutoSize = false; this.txbPath.BackColor = System.Drawing.SystemColors.Window; this.txbPath.Cursor = System.Windows.Forms.Cursors.IBeam; this.txbPath.Enabled = false; this.txbPath.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.txbPath.ForeColor = System.Drawing.SystemColors.WindowText; this.txbPath.Location = new System.Drawing.Point(136, 8); this.txbPath.MaxLength = 0; this.txbPath.Name = "txbPath"; this.txbPath.RightToLeft = System.Windows.Forms.RightToLeft.No; this.txbPath.Size = new System.Drawing.Size(369, 19); this.txbPath.TabIndex = 10; this.txbPath.Text = ""; // // cmdLoad // this.cmdLoad.BackColor = System.Drawing.SystemColors.Control; this.cmdLoad.Cursor = System.Windows.Forms.Cursors.Default; this.cmdLoad.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.cmdLoad.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdLoad.Location = new System.Drawing.Point(8, 8); this.cmdLoad.Name = "cmdLoad"; this.cmdLoad.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdLoad.Size = new System.Drawing.Size(121, 25); this.cmdLoad.TabIndex = 9; this.cmdLoad.Text = "Load Map Document"; this.cmdLoad.Click += new System.EventHandler(this.cmdLoad_Click); // // Label4 // this.Label4.BackColor = System.Drawing.SystemColors.Control; this.Label4.Cursor = System.Windows.Forms.Cursors.Default; this.Label4.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Label4.ForeColor = System.Drawing.SystemColors.ControlText; this.Label4.Location = new System.Drawing.Point(8, 48); this.Label4.Name = "Label4"; this.Label4.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label4.Size = new System.Drawing.Size(65, 17); this.Label4.TabIndex = 12; this.Label4.Text = "Focus Map:"; // // cmdZoomPage // this.cmdZoomPage.BackColor = System.Drawing.SystemColors.Control; this.cmdZoomPage.Cursor = System.Windows.Forms.Cursors.Default; this.cmdZoomPage.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.cmdZoomPage.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdZoomPage.Location = new System.Drawing.Point(12, 352); this.cmdZoomPage.Name = "cmdZoomPage"; this.cmdZoomPage.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdZoomPage.Size = new System.Drawing.Size(97, 25); this.cmdZoomPage.TabIndex = 16; this.cmdZoomPage.Text = "Zoom to Page"; this.cmdZoomPage.Click += new System.EventHandler(this.cmdZoomPage_Click); // // cmdFullExtent // this.cmdFullExtent.BackColor = System.Drawing.SystemColors.Control; this.cmdFullExtent.Cursor = System.Windows.Forms.Cursors.Default; this.cmdFullExtent.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.cmdFullExtent.ForeColor = System.Drawing.SystemColors.ControlText; this.cmdFullExtent.Location = new System.Drawing.Point(356, 352); this.cmdFullExtent.Name = "cmdFullExtent"; this.cmdFullExtent.RightToLeft = System.Windows.Forms.RightToLeft.No; this.cmdFullExtent.Size = new System.Drawing.Size(153, 25); this.cmdFullExtent.TabIndex = 13; this.cmdFullExtent.Text = "Zoom to Full Data Extent"; this.cmdFullExtent.Click += new System.EventHandler(this.cmdFullExtent_Click); // // Label2 // this.Label2.BackColor = System.Drawing.SystemColors.Control; this.Label2.Cursor = System.Windows.Forms.Cursors.Default; this.Label2.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Label2.ForeColor = System.Drawing.SystemColors.ControlText; this.Label2.Location = new System.Drawing.Point(124, 352); this.Label2.Name = "Label2"; this.Label2.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label2.Size = new System.Drawing.Size(257, 17); this.Label2.TabIndex = 15; this.Label2.Text = "Right mouse button to pan page or data."; // // Label1 // this.Label1.BackColor = System.Drawing.SystemColors.Control; this.Label1.Cursor = System.Windows.Forms.Cursors.Default; this.Label1.Font = new System.Drawing.Font("Arial", 8F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((System.Byte)(0))); this.Label1.ForeColor = System.Drawing.SystemColors.ControlText; this.Label1.Location = new System.Drawing.Point(124, 368); this.Label1.Name = "Label1"; this.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No; this.Label1.Size = new System.Drawing.Size(249, 17); this.Label1.TabIndex = 14; this.Label1.Text = "Left mouse button to zoom in on page or data."; // // axPageLayoutControl1 // this.axPageLayoutControl1.Location = new System.Drawing.Point(8, 72); this.axPageLayoutControl1.Name = "axPageLayoutControl1"; this.axPageLayoutControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axPageLayoutControl1.OcxState"))); this.axPageLayoutControl1.Size = new System.Drawing.Size(224, 272); this.axPageLayoutControl1.TabIndex = 17; this.axPageLayoutControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IPageLayoutControlEvents_Ax_OnMouseDownEventHandler(this.axPageLayoutControl1_OnMouseDown); this.axPageLayoutControl1.OnPageLayoutReplaced += new ESRI.ArcGIS.Controls.IPageLayoutControlEvents_Ax_OnPageLayoutReplacedEventHandler(this.axPageLayoutControl1_OnPageLayoutReplaced); this.axPageLayoutControl1.OnAfterScreenDraw += new ESRI.ArcGIS.Controls.IPageLayoutControlEvents_Ax_OnAfterScreenDrawEventHandler(this.axPageLayoutControl1_OnAfterScreenDraw); this.axPageLayoutControl1.OnFocusMapChanged += new System.EventHandler(this.axPageLayoutControl1_OnFocusMapChanged); this.axPageLayoutControl1.OnBeforeScreenDraw += new ESRI.ArcGIS.Controls.IPageLayoutControlEvents_Ax_OnBeforeScreenDrawEventHandler(this.axPageLayoutControl1_OnBeforeScreenDraw); // // axMapControl1 // this.axMapControl1.Location = new System.Drawing.Point(240, 48); this.axMapControl1.Name = "axMapControl1"; this.axMapControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axMapControl1.OcxState"))); this.axMapControl1.Size = new System.Drawing.Size(272, 296); this.axMapControl1.TabIndex = 18; this.axMapControl1.OnMouseDown += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnMouseDownEventHandler(this.axMapControl1_OnMouseDown); this.axMapControl1.OnAfterScreenDraw += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnAfterScreenDrawEventHandler(this.axMapControl1_OnAfterScreenDraw); this.axMapControl1.OnBeforeScreenDraw += new ESRI.ArcGIS.Controls.IMapControlEvents2_Ax_OnBeforeScreenDrawEventHandler(this.axMapControl1_OnBeforeScreenDraw); // // axLicenseControl1 // this.axLicenseControl1.Enabled = true; this.axLicenseControl1.Location = new System.Drawing.Point(160, 96); this.axLicenseControl1.Name = "axLicenseControl1"; this.axLicenseControl1.OcxState = ((System.Windows.Forms.AxHost.State)(resources.GetObject("axLicenseControl1.OcxState"))); this.axLicenseControl1.Size = new System.Drawing.Size(200, 50); this.axLicenseControl1.TabIndex = 19; // // Form1 // this.AutoScaleBaseSize = new System.Drawing.Size(5, 13); this.ClientSize = new System.Drawing.Size(520, 390); this.Controls.Add(this.axLicenseControl1); this.Controls.Add(this.axMapControl1); this.Controls.Add(this.axPageLayoutControl1); this.Controls.Add(this.cmdZoomPage); this.Controls.Add(this.cmdFullExtent); this.Controls.Add(this.Label2); this.Controls.Add(this.Label1); this.Controls.Add(this.cboMaps); this.Controls.Add(this.txbPath); this.Controls.Add(this.cmdLoad); this.Controls.Add(this.Label4); this.Name = "Form1"; this.Text = "Form1"; this.Load += new System.EventHandler(this.Form1_Load); ((System.ComponentModel.ISupportInitialize)(this.axPageLayoutControl1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.axMapControl1)).EndInit(); ((System.ComponentModel.ISupportInitialize)(this.axLicenseControl1)).EndInit(); this.ResumeLayout(false); } #endregion /// <summary> /// The main entry point for the application. /// </summary> [STAThread] static void Main() { if (!RuntimeManager.Bind(ProductCode.Engine)) { if (!RuntimeManager.Bind(ProductCode.Desktop)) { MessageBox.Show("Unable to bind to ArcGIS runtime. Application will be shut down."); return; } } Application.Run(new Form1()); } private void Form1_Load(object sender, System.EventArgs e) { m_bUpdateFocusMap = false; m_bReplacedPageLayout = false; axMapControl1.ShowScrollbars = false; } private void cmdFullExtent_Click(object sender, System.EventArgs e) { m_bUpdateFocusMap = true; //Zoom to the full extent of the data in the map axMapControl1.Extent = axMapControl1.FullExtent; } private void cmdZoomPage_Click(object sender, System.EventArgs e) { //Zoom to the whole page axPageLayoutControl1.ZoomToWholePage(); } private void cmdLoad_Click(object sender, System.EventArgs e) { //Open a file dialog for selecting map documents openFileDialog1.Title = "Browse Map Document"; openFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd"; openFileDialog1.ShowDialog(); //Exit if no map document is selected string filePath = openFileDialog1.FileName; if (filePath == "") return; //If valid map document if (axPageLayoutControl1.CheckMxFile(filePath)) { //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; //Reset controls axMapControl1.ActiveView.Clear(); axMapControl1.ActiveView.GraphicsContainer.DeleteAllElements(); axMapControl1.Refresh(); cboMaps.Items.Clear(); txbPath.Text = filePath; //Load map document axPageLayoutControl1.LoadMxFile(filePath,Type.Missing); //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; } else { MessageBox.Show(filePath + " is not a valid ArcMap document"); return; } } private void ListMaps() { //Get IGraphicsContainer interface IGraphicsContainer graphicsContainer = axPageLayoutControl1.GraphicsContainer; graphicsContainer.Reset(); //Query Interface for IElement interface IElement element = graphicsContainer.Next(); //Loop through the elements int index = 0; while (element != null) { if (element is IMapFrame) { IMapFrame mapFrame = (IMapFrame) element; //Query interface for IElementProperties interface IElementProperties elementProperties = (IElementProperties) element; //Get the name of the Map in the MapFrame string sMapName = mapFrame.Map.Name; //Set the name of the MapFrame to the Map's name elementProperties.Name = sMapName; //Add the map name to the ComboBox cboMaps.Items.Insert(index, mapFrame.Map.Name); //If the Map is the FocusMap select the MapName in the ComboBox if (sMapName == axPageLayoutControl1.ActiveView.FocusMap.Name) { cboMaps.SelectedIndex = index; } index = index + 1; } element = graphicsContainer.Next(); } } private void CopyAndOverwriteMap() { //Get IObjectCopy interface IObjectCopy objectCopy = new ObjectCopyClass(); //Get IUnknown interface (map to copy) object toCopyMap = axPageLayoutControl1.ActiveView.FocusMap; //Each Map contained within the PageLayout encapsulated by the //PageLayoutControl, resides within a separate MapFrame, and therefore //have their IMap::IsFramed property set to True. A Map contained within the //MapControl does not reside within a MapFrame. As such before //overwriting the MapControl's map, the IMap::IsFramed property must be set //to False. Failure to do this will lead to corrupted map documents saved //containing the contents of the MapControl. IMap map = toCopyMap as IMap; map.IsFramed = false; //Get IUnknown interface (copied map) object copiedMap = objectCopy.Copy(toCopyMap); //Get IUnknown interface (map to overwrite) object toOverwriteMap = axMapControl1.Map; //Overwrite the MapControl's map objectCopy.Overwrite(copiedMap, ref toOverwriteMap); SetMapExtent(); } private void SetMapExtent() { //Get IActiveView interface IActiveView activeView = (IActiveView) axPageLayoutControl1.ActiveView.FocusMap; //Set the control's extent axMapControl1.Extent = activeView.Extent; //Refresh the display axMapControl1.Refresh(); } private void axPageLayoutControl1_OnFocusMapChanged(object sender, System.EventArgs e) { CopyAndOverwriteMap(); } private void cboMaps_SelectedIndexChanged(object sender, System.EventArgs e) { IPageLayoutControl pageLayoutControl = (IPageLayoutControl) axPageLayoutControl1.GetOcx(); //Get IMapFrame interface IMapFrame element = (IMapFrame) pageLayoutControl.FindElementByName(cboMaps.Text, 1); //Set the FocusMap axPageLayoutControl1.ActiveView.FocusMap = element.Map; } private void axMapControl1_OnBeforeScreenDraw(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnBeforeScreenDrawEvent e) { //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; } private void axMapControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent e) { m_bUpdateFocusMap = true; if (e.button == 1) { axMapControl1.Extent = axMapControl1.TrackRectangle(); } else if (e.button == 2) { axMapControl1.Pan(); } } private void axMapControl1_OnAfterScreenDraw(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvent e) { //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; if (m_bUpdateFocusMap == false) return; //Get IActiveView interface IActiveView activeView = (IActiveView) axPageLayoutControl1.ActiveView.FocusMap; //Get IDisplayTransformation interface IDisplayTransformation displayTransformation = activeView.ScreenDisplay.DisplayTransformation; //Set the visible extent of the focus map displayTransformation.VisibleBounds = axMapControl1.Extent; //Refresh the focus map activeView.Refresh(); m_bUpdateFocusMap = false; } private void axPageLayoutControl1_OnAfterScreenDraw(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnAfterScreenDrawEvent e) { //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault; if (m_bReplacedPageLayout == false) return; CopyAndOverwriteMap(); m_bReplacedPageLayout = false; } private void axPageLayoutControl1_OnMouseDown(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnMouseDownEvent e) { if (e.button == 1) { axPageLayoutControl1.Extent = axPageLayoutControl1.TrackRectangle(); } else if (e.button == 2) { axPageLayoutControl1.Pan(); } } private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnPageLayoutReplacedEvent e) { m_bReplacedPageLayout = true; ListMaps(); } private void axPageLayoutControl1_OnBeforeScreenDraw(object sender, ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnBeforeScreenDrawEvent e) { //Set mouse pointers axPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; axMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass; } } }
[Visual Basic .NET]
CopyFocusMap.vb
Imports ESRI.ArcGIS.Carto Imports ESRI.ArcGIS.Display Imports ESRI.ArcGIS.esriSystem Imports ESRI.ArcGIS.SystemUI Imports ESRI.ArcGIS.Controls Imports ESRI.ArcGIS Public Class Form1 Inherits System.Windows.Forms.Form <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 Form1()) End Sub #Region "Windows Form Designer generated code " Public Sub New() MyBase.New() 'This call is required by the Windows Form Designer. InitializeComponent() End Sub 'Form overrides dispose to clean up the component list. Protected Overloads Overrides Sub Dispose(ByVal Disposing As Boolean) 'Release COM objects ESRI.ArcGIS.ADF.COMSupport.AOUninitialize.Shutdown() If Disposing Then If Not components Is Nothing Then components.Dispose() End If End If MyBase.Dispose(Disposing) End Sub 'Required by the Windows Form Designer Private components As System.ComponentModel.IContainer Public WithEvents cmdZoomPage As System.Windows.Forms.Button Public WithEvents cboMaps As System.Windows.Forms.ComboBox Public WithEvents txbPath As System.Windows.Forms.TextBox Public WithEvents cmdLoad As System.Windows.Forms.Button Public WithEvents cmdFullExtent As System.Windows.Forms.Button Public WithEvents Label4 As System.Windows.Forms.Label Public WithEvents Label2 As System.Windows.Forms.Label Public WithEvents Label1 As System.Windows.Forms.Label 'NOTE: The following procedure is required by the Windows Form Designer 'It can be modified using the Windows Form Designer. 'Do not modify it using the code editor. Friend WithEvents OpenFileDialog1 As System.Windows.Forms.OpenFileDialog Friend WithEvents AxLicenseControl1 As ESRI.ArcGIS.Controls.AxLicenseControl Friend WithEvents AxMapControl1 As ESRI.ArcGIS.Controls.AxMapControl Friend WithEvents AxPageLayoutControl1 As ESRI.ArcGIS.Controls.AxPageLayoutControl <System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent() Dim resources As System.ComponentModel.ComponentResourceManager = New System.ComponentModel.ComponentResourceManager(GetType(Form1)) Me.cmdZoomPage = New System.Windows.Forms.Button Me.cboMaps = New System.Windows.Forms.ComboBox Me.txbPath = New System.Windows.Forms.TextBox Me.cmdLoad = New System.Windows.Forms.Button Me.cmdFullExtent = New System.Windows.Forms.Button Me.Label4 = New System.Windows.Forms.Label Me.Label2 = New System.Windows.Forms.Label Me.Label1 = New System.Windows.Forms.Label Me.OpenFileDialog1 = New System.Windows.Forms.OpenFileDialog Me.AxLicenseControl1 = New ESRI.ArcGIS.Controls.AxLicenseControl Me.AxMapControl1 = New ESRI.ArcGIS.Controls.AxMapControl Me.AxPageLayoutControl1 = New ESRI.ArcGIS.Controls.AxPageLayoutControl CType(Me.AxLicenseControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.AxMapControl1, System.ComponentModel.ISupportInitialize).BeginInit() CType(Me.AxPageLayoutControl1, System.ComponentModel.ISupportInitialize).BeginInit() Me.SuspendLayout() ' 'cmdZoomPage ' Me.cmdZoomPage.BackColor = System.Drawing.SystemColors.Control Me.cmdZoomPage.Cursor = System.Windows.Forms.Cursors.Default Me.cmdZoomPage.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.cmdZoomPage.ForeColor = System.Drawing.SystemColors.ControlText Me.cmdZoomPage.Location = New System.Drawing.Point(8, 360) Me.cmdZoomPage.Name = "cmdZoomPage" Me.cmdZoomPage.RightToLeft = System.Windows.Forms.RightToLeft.No Me.cmdZoomPage.Size = New System.Drawing.Size(97, 25) Me.cmdZoomPage.TabIndex = 9 Me.cmdZoomPage.Text = "Zoom to Page" Me.cmdZoomPage.UseVisualStyleBackColor = False ' 'cboMaps ' Me.cboMaps.BackColor = System.Drawing.SystemColors.Window Me.cboMaps.Cursor = System.Windows.Forms.Cursors.Default Me.cboMaps.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.cboMaps.ForeColor = System.Drawing.SystemColors.WindowText Me.cboMaps.Location = New System.Drawing.Point(72, 48) Me.cboMaps.Name = "cboMaps" Me.cboMaps.RightToLeft = System.Windows.Forms.RightToLeft.No Me.cboMaps.Size = New System.Drawing.Size(161, 22) Me.cboMaps.TabIndex = 7 ' 'txbPath ' Me.txbPath.AcceptsReturn = True Me.txbPath.BackColor = System.Drawing.SystemColors.Window Me.txbPath.Cursor = System.Windows.Forms.Cursors.IBeam Me.txbPath.Enabled = False Me.txbPath.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.txbPath.ForeColor = System.Drawing.SystemColors.WindowText Me.txbPath.Location = New System.Drawing.Point(136, 11) Me.txbPath.MaxLength = 0 Me.txbPath.Name = "txbPath" Me.txbPath.RightToLeft = System.Windows.Forms.RightToLeft.No Me.txbPath.Size = New System.Drawing.Size(369, 20) Me.txbPath.TabIndex = 6 ' 'cmdLoad ' Me.cmdLoad.BackColor = System.Drawing.SystemColors.Control Me.cmdLoad.Cursor = System.Windows.Forms.Cursors.Default Me.cmdLoad.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.cmdLoad.ForeColor = System.Drawing.SystemColors.ControlText Me.cmdLoad.Location = New System.Drawing.Point(8, 8) Me.cmdLoad.Name = "cmdLoad" Me.cmdLoad.RightToLeft = System.Windows.Forms.RightToLeft.No Me.cmdLoad.Size = New System.Drawing.Size(121, 25) Me.cmdLoad.TabIndex = 5 Me.cmdLoad.Text = "Load Map Document" Me.cmdLoad.UseVisualStyleBackColor = False ' 'cmdFullExtent ' Me.cmdFullExtent.BackColor = System.Drawing.SystemColors.Control Me.cmdFullExtent.Cursor = System.Windows.Forms.Cursors.Default Me.cmdFullExtent.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.cmdFullExtent.ForeColor = System.Drawing.SystemColors.ControlText Me.cmdFullExtent.Location = New System.Drawing.Point(352, 360) Me.cmdFullExtent.Name = "cmdFullExtent" Me.cmdFullExtent.RightToLeft = System.Windows.Forms.RightToLeft.No Me.cmdFullExtent.Size = New System.Drawing.Size(153, 25) Me.cmdFullExtent.TabIndex = 2 Me.cmdFullExtent.Text = "Zoom to Full Data Extent" Me.cmdFullExtent.UseVisualStyleBackColor = False ' 'Label4 ' Me.Label4.BackColor = System.Drawing.SystemColors.Control Me.Label4.Cursor = System.Windows.Forms.Cursors.Default Me.Label4.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label4.ForeColor = System.Drawing.SystemColors.ControlText Me.Label4.Location = New System.Drawing.Point(8, 48) Me.Label4.Name = "Label4" Me.Label4.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Label4.Size = New System.Drawing.Size(65, 17) Me.Label4.TabIndex = 8 Me.Label4.Text = "Focus Map:" ' 'Label2 ' Me.Label2.BackColor = System.Drawing.SystemColors.Control Me.Label2.Cursor = System.Windows.Forms.Cursors.Default Me.Label2.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label2.ForeColor = System.Drawing.SystemColors.ControlText Me.Label2.Location = New System.Drawing.Point(120, 360) Me.Label2.Name = "Label2" Me.Label2.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Label2.Size = New System.Drawing.Size(257, 17) Me.Label2.TabIndex = 4 Me.Label2.Text = "Right mouse button to pan page or data." ' 'Label1 ' Me.Label1.BackColor = System.Drawing.SystemColors.Control Me.Label1.Cursor = System.Windows.Forms.Cursors.Default Me.Label1.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Label1.ForeColor = System.Drawing.SystemColors.ControlText Me.Label1.Location = New System.Drawing.Point(120, 376) Me.Label1.Name = "Label1" Me.Label1.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Label1.Size = New System.Drawing.Size(249, 17) Me.Label1.TabIndex = 3 Me.Label1.Text = "Left mouse button to zoom in on page or data." ' 'AxLicenseControl1 ' Me.AxLicenseControl1.Enabled = True Me.AxLicenseControl1.Location = New System.Drawing.Point(152, 96) Me.AxLicenseControl1.Name = "AxLicenseControl1" Me.AxLicenseControl1.OcxState = CType(resources.GetObject("AxLicenseControl1.OcxState"), System.Windows.Forms.AxHost.State) Me.AxLicenseControl1.Size = New System.Drawing.Size(32, 32) Me.AxLicenseControl1.TabIndex = 12 ' 'AxMapControl1 ' Me.AxMapControl1.Location = New System.Drawing.Point(239, 48) Me.AxMapControl1.Name = "AxMapControl1" Me.AxMapControl1.OcxState = CType(resources.GetObject("AxMapControl1.OcxState"), System.Windows.Forms.AxHost.State) Me.AxMapControl1.Size = New System.Drawing.Size(266, 306) Me.AxMapControl1.TabIndex = 13 ' 'AxPageLayoutControl1 ' Me.AxPageLayoutControl1.Location = New System.Drawing.Point(8, 76) Me.AxPageLayoutControl1.Name = "AxPageLayoutControl1" Me.AxPageLayoutControl1.OcxState = CType(resources.GetObject("AxPageLayoutControl1.OcxState"), System.Windows.Forms.AxHost.State) Me.AxPageLayoutControl1.Size = New System.Drawing.Size(225, 278) Me.AxPageLayoutControl1.TabIndex = 14 ' 'Form1 ' Me.AutoScaleBaseSize = New System.Drawing.Size(5, 13) Me.BackColor = System.Drawing.SystemColors.Control Me.ClientSize = New System.Drawing.Size(515, 402) Me.Controls.Add(Me.AxLicenseControl1) Me.Controls.Add(Me.AxMapControl1) Me.Controls.Add(Me.cmdZoomPage) Me.Controls.Add(Me.cboMaps) Me.Controls.Add(Me.txbPath) Me.Controls.Add(Me.cmdLoad) Me.Controls.Add(Me.cmdFullExtent) Me.Controls.Add(Me.Label4) Me.Controls.Add(Me.Label2) Me.Controls.Add(Me.Label1) Me.Controls.Add(Me.AxPageLayoutControl1) Me.Cursor = System.Windows.Forms.Cursors.Default Me.Font = New System.Drawing.Font("Arial", 8.0!, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, CType(0, Byte)) Me.Location = New System.Drawing.Point(4, 23) Me.Name = "Form1" Me.RightToLeft = System.Windows.Forms.RightToLeft.No Me.Text = "Update MapControl's Map with PageLayoutControl's Focus Map " CType(Me.AxLicenseControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.AxMapControl1, System.ComponentModel.ISupportInitialize).EndInit() CType(Me.AxPageLayoutControl1, System.ComponentModel.ISupportInitialize).EndInit() Me.ResumeLayout(False) Me.PerformLayout() End Sub #End Region Dim m_bUpdateFocusMap As Boolean Dim m_bReplacedPageLayout As Boolean Private Sub cmdFullExtent_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdFullExtent.Click m_bUpdateFocusMap = True 'Zoom to the full extent of the data in the map AxMapControl1.Extent = AxMapControl1.FullExtent End Sub Private Sub cmdZoomPage_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdZoomPage.Click 'Zoom to the whole page AxPageLayoutControl1.ZoomToWholePage() End Sub Private Sub cmdLoad_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles cmdLoad.Click 'Open a file dialog for selecting map documents OpenFileDialog1.Title = "Browse Map Document" OpenFileDialog1.Filter = "Map Documents (*.mxd)|*.mxd" OpenFileDialog1.ShowDialog() 'Exit if no map document is selected Dim sFilePath As String sFilePath = OpenFileDialog1.FileName If sFilePath = "" Then Exit Sub 'If valid map document If AxPageLayoutControl1.CheckMxFile(sFilePath) Then 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass 'Reset controls AxMapControl1.ActiveView.Clear() AxMapControl1.ActiveView.GraphicsContainer.DeleteAllElements() AxMapControl1.Refresh() cboMaps.Items.Clear() txbPath.Text = sFilePath 'Load map document AxPageLayoutControl1.LoadMxFile(sFilePath) 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault Else MsgBox(sFilePath & " is not a valid ArcMap document") Exit Sub End If End Sub Public Sub ListMaps() 'Get IGraphicsContainer interface Dim pGraphicsContainer As IGraphicsContainer pGraphicsContainer = AxPageLayoutControl1.GraphicsContainer pGraphicsContainer.Reset() 'Query Interface for IElement interface Dim pElement As IElement pElement = pGraphicsContainer.Next Dim index As Short index = 0 'Loop through the elements Dim pMapFrame As IMapFrame Dim pElementProperties As IElementProperties Dim sMapName As String Do While Not pElement Is Nothing 'Query interface for IMapFrame interface If TypeOf pElement Is IMapFrame Then pMapFrame = pElement 'Query interface for IElementProperties interface pElementProperties = pElement 'Get the name of the Map in the MapFrame sMapName = pMapFrame.Map.Name 'Set the name of the MapFrame to the Map's name pElementProperties.Name = sMapName 'Add the map name to the ComboBox cboMaps.Items.Insert(index, pMapFrame.Map.Name) 'If the Map is the FocusMap select the MapName in the ComboBox If sMapName = AxPageLayoutControl1.ActiveView.FocusMap.Name Then cboMaps.SelectedIndex = index End If index = index + 1 End If pElement = pGraphicsContainer.Next Loop End Sub Private Sub Form1_Load(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles MyBase.Load m_bUpdateFocusMap = False m_bReplacedPageLayout = False AxMapControl1.ShowScrollbars = False End Sub Public Sub CopyAndOverwriteMap() 'Get IObjectCopy interface Dim pObjectCopy As IObjectCopy pObjectCopy = New ObjectCopyClass 'Get IUnknown interface (map to copy) Dim pToCopyMap As Object pToCopyMap = AxPageLayoutControl1.ActiveView.FocusMap 'Each Map contained within the PageLayout encapsulated by the 'PageLayoutControl, resides within a separate MapFrame, and therefore 'have their IMap::IsFramed property set to True. A Map contained within the 'MapControl does not reside within a MapFrame. As such before 'overwriting the MapControl's map, the IMap::IsFramed property must be set 'to False. Failure to do this will lead to corrupted map documents saved 'containing the contents of the MapControl. Dim pMap As IMap pMap = pToCopyMap pMap.IsFramed = False 'Get IUnknown interface (copied map) Dim pCopiedMap As Object pCopiedMap = pObjectCopy.Copy(pToCopyMap) 'Get IUnknown interface (map to overwrite) Dim pToOverwriteMap As Object pToOverwriteMap = AxMapControl1.Map 'Overwrite the MapControl's map pObjectCopy.Overwrite(pCopiedMap, pToOverwriteMap) SetMapExtent() End Sub Private Sub SetMapExtent() 'Get IActiveView interface Dim pActiveView As IActiveView pActiveView = AxPageLayoutControl1.ActiveView.FocusMap 'Set the control's extent AxMapControl1.Extent = pActiveView.Extent 'Refresh the display AxMapControl1.Refresh() End Sub Private Sub AxPageLayoutControl1_OnFocusMapChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles AxPageLayoutControl1.OnFocusMapChanged CopyAndOverwriteMap() End Sub Private Sub cboMaps_SelectedIndexChanged(ByVal sender As Object, ByVal e As System.EventArgs) Handles cboMaps.SelectedIndexChanged Dim pPageLayoutControl As IPageLayoutControl pPageLayoutControl = AxPageLayoutControl1.Object 'Get IMapFrame interface Dim pElement As IMapFrame pElement = pPageLayoutControl.FindElementByName(cboMaps.Text) 'Set the FocusMap AxPageLayoutControl1.ActiveView.FocusMap = pElement.Map End Sub Private Sub AxPageLayoutControl1_OnAfterScreenDraw(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnAfterScreenDrawEvent) Handles AxPageLayoutControl1.OnAfterScreenDraw 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault If m_bReplacedPageLayout = False Then Exit Sub CopyAndOverwriteMap() m_bReplacedPageLayout = False End Sub Private Sub AxPageLayoutControl1_OnBeforeScreenDraw(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnBeforeScreenDrawEvent) Handles AxPageLayoutControl1.OnBeforeScreenDraw 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass End Sub Private Sub AxMapControl1_OnBeforeScreenDraw(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnBeforeScreenDrawEvent) Handles AxMapControl1.OnBeforeScreenDraw 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerHourglass End Sub Private Sub AxMapControl1_OnAfterScreenDraw(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnAfterScreenDrawEvent) Handles AxMapControl1.OnAfterScreenDraw 'Set mouse pointers AxPageLayoutControl1.MousePointer = esriControlsMousePointer.esriPointerDefault AxMapControl1.MousePointer = esriControlsMousePointer.esriPointerDefault If m_bUpdateFocusMap = False Then Exit Sub 'Get IActiveView interface Dim pActiveView As IActiveView pActiveView = AxPageLayoutControl1.ActiveView.FocusMap 'Get IDisplayTransformation interface Dim pDisplayTransformation As IDisplayTransformation pDisplayTransformation = pActiveView.ScreenDisplay.DisplayTransformation 'Set the visible extent of the focus map pDisplayTransformation.VisibleBounds = AxMapControl1.Extent 'Refresh the focus map pActiveView.Refresh() m_bUpdateFocusMap = False End Sub Private Sub AxMapControl1_OnMouseDown(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseDownEvent) Handles AxMapControl1.OnMouseDown m_bUpdateFocusMap = True If e.button = 1 Then AxMapControl1.Extent = AxMapControl1.TrackRectangle ElseIf e.button = 2 Then AxMapControl1.Pan() End If End Sub Private Sub AxPageLayoutControl1_OnMouseDown(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnMouseDownEvent) Handles AxPageLayoutControl1.OnMouseDown If e.button = 1 Then AxPageLayoutControl1.Extent = AxPageLayoutControl1.TrackRectangle ElseIf e.button = 2 Then AxPageLayoutControl1.Pan() End If End Sub Private Sub AxPageLayoutControl1_OnPageLayoutReplaced(ByVal sender As Object, ByVal e As ESRI.ArcGIS.Controls.IPageLayoutControlEvents_OnPageLayoutReplacedEvent) Handles AxPageLayoutControl1.OnPageLayoutReplaced m_bReplacedPageLayout = True ListMaps() End Sub End Class