实现关键两点:
1.保持两个显示控件的一致性。
2.绘制鹰眼窗口显示方框。
窗体包括两个Mapcontrol,几个按钮
源代码如下:(部分代码参考ESRI中国论坛相关帖子)
Code
1
using System;
2
using System.Collections.Generic;
3
using System.ComponentModel;
4
using System.Data;
5
using System.Drawing;
6
using System.Text;
7
using System.Windows.Forms;
8
using ESRI.ArcGIS.Carto;
9
using ESRI.ArcGIS.Controls;
10
using ESRI.ArcGIS.Geometry;
11
using ESRI.ArcGIS.Display;
12![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
13
namespace WindowsApplication1
14![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ContractedBlock.gif)
{
15
public partial class Form1 : Form
16![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
17
public Form1()
18![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
19
InitializeComponent();
20
21
}
22![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
23
private void buttonOpen_Click(object sender, EventArgs e)
24![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
25
//加载MXD文件
26![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
27
IMapDocument pMapDocument = new MapDocumentClass();
28
OpenFileDialog Open = new OpenFileDialog();
29![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
30
Open.Title = "Select File";
31
Open.Filter = "Document File(.mxd)|*.mxd";
32![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
33
Open.ShowDialog();
34![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
35
string strFullPath = Open.FileName;
36
if (strFullPath == "") return;
37![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
38
pMapDocument.Open(strFullPath, "");
39
for (int i = 0; i <= pMapDocument.MapCount - 1; i++)
40![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
41
//一个IMapDocument对象中可能有多个Map对象,遍历每个map对象
42
axMapControl1.Map = pMapDocument.get_Map(i);
43![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
44
}
45
axMapControl1.Refresh();
46![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
47
}
48![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
49
private void buttonExit_Click(object sender, EventArgs e)
50![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
51
Application.Exit();
52
}
53![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
54
private void axMapControl1_OnMouseDown(object sender, IMapControlEvents2_OnMouseDownEvent e)
55![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
56
if (e.button == 2)
57![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
58
//右键局部放大,后面应该有个局部刷新CtlRefresh,未搞定
59
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPageZoomIn;
60
axMapControl1.Extent = axMapControl1.TrackRectangle();
61
}
62
else if (e.button == 1)
63![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
64
//左键移动,也应有局部刷新
65
axMapControl1.MousePointer = esriControlsMousePointer.esriPointerPan;
66
axMapControl1.Pan();
67
}
68
}
69![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
70
private void buttonResize_Click(object sender, EventArgs e)
71![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
72
//还原初始大小
73
axMapControl1.Extent = axMapControl1.FullExtent;
74
}
75![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
76
private void axMapControl1_OnMapReplaced(object sender, IMapControlEvents2_OnMapReplacedEvent e)
77![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
78
IMap pMap;
79
pMap = this.axMapControl1.Map;
80
int i;
81
this.axMapControl2.Map.ClearLayers();
82
this.axMapControl2.ActiveView.Refresh();
83![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
84
for (i = 0; i <= pMap.LayerCount - 1; i++)
85![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
86
this.axMapControl2.Map.AddLayer(pMap.get_Layer(pMap.LayerCount - 1 - i));
87
}
88
}
89![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
90
private void axMapControl1_OnExtentUpdated(object sender, IMapControlEvents2_OnExtentUpdatedEvent e)
91![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
{
92
// 得到新范围
93![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
94
IEnvelope pEnv = (IEnvelope)e.newEnvelope;
95![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
96![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
97
IGraphicsContainer pGra = axMapControl2.Map as IGraphicsContainer;
98![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
99
IActiveView pAv = pGra as IActiveView;
100![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
101
//在绘制前,清除axMapControl2中的任何图形元素
102![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
103
pGra.DeleteAllElements();
104![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
105![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
106
IRectangleElement pRectangleEle = new RectangleElementClass();
107![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
108
IElement pEle = pRectangleEle as IElement;
109![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
110
pEle.Geometry = pEnv;
111![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
112![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
113
//设置鹰眼图中的红线框
114![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
115
IRgbColor pColor = new RgbColorClass();
116![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
117
pColor.Red = 255;
118![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
119
pColor.Green = 0;
120![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
121
pColor.Blue = 0;
122![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
123
pColor.Transparency = 255;
124![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
125
//产生一个线符号对象
126![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
127
ILineSymbol pOutline = new SimpleLineSymbolClass();
128![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
129
pOutline.Width = 2;
130![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
131
pOutline.Color = pColor;
132![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
133![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
134
//设置颜色属性
135![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
136
pColor = new RgbColorClass();
137![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
138
pColor.Red = 255;
139![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
140
pColor.Green = 0;
141![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
142
pColor.Blue = 0;
143![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
144
pColor.Transparency = 0;
145![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
146
//设置填充符号的属性
147![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
148
IFillSymbol pFillSymbol = new SimpleFillSymbolClass();
149![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
150
pFillSymbol.Color = pColor;
151![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
152
pFillSymbol.Outline = pOutline;
153![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
154![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
155
IFillShapeElement pFillShapeEle = pEle as IFillShapeElement;
156![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
157
pFillShapeEle.Symbol = pFillSymbol;
158![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
159
pGra.AddElement((IElement)pFillShapeEle, 0);
160![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
161
pAv.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);
162![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
163![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
164
}
165![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
166
}
167
}
168