1 using System;
2 using System.Collections.Generic;
3 using System.ComponentModel;
4 using System.Data;
5 using System.Drawing;
6 using System.Linq;
7 using System.Text;
8 using System.Windows.Forms;
9 using ESRI.ArcGIS.Geometry;
10 using ESRI.ArcGIS.Controls;
11 using System.Runtime.InteropServices;
12 using ESRI.ArcGIS.Display;
13
14 namespace WindowsFormsApplication2
15 {
16 public partial class Form1 : Form
17 {
18 public Form1()
19 {
20 InitializeComponent();
21 }
22
23
24 double xmin, ymin, xmax, ymax;
25 double Xmin, Ymin, Xmax, Ymax;
26 int Xvalue = 0;
27 int Yvalue = 0;
28 int Xlarge = 0;
29 int Ylarge = 0;
30 double heightFullenv, h, widthFullEnv, w;
31 double initScale = 0d;
32 int vscrollMaxium = 0;
33 int hscrollMaxium = 0;
34
35 IEnvelope pEnvMap = null;
36 IMapControl2 pMapControl = null;
37 private void axMapControl1_OnExtentUpdated(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnExtentUpdatedEvent e)
38 {
39 pEnvMap = e.newEnvelope as IEnvelope;
40 pMapControl = axMapControl1.Object as IMapControl2;
41 if(initScale < 1)
42 initScale = pMapControl.MapScale;
43
44 xmin = pEnvMap.XMin;
45 ymin = pEnvMap.YMin;
46 xmax = pEnvMap.XMax;
47 ymax = pEnvMap.YMax;
48 w = pEnvMap.Width;
49 h = pEnvMap.Height;
50 lblLeftBottom.Text = Math.Round(pEnvMap.XMin,2).ToString() + "," + Math.Round(pEnvMap.YMin,2).ToString();
51 lblRightTop.Text = Math.Round(pEnvMap.XMax, 2).ToString() + "," + Math.Round(pEnvMap.YMax, 2).ToString();
52 lblw.Text = pEnvMap.Width.ToString();
53
54
55 IEnvelope pEnvFull = pMapControl.ActiveView.FullExtent as IEnvelope;
56 Xmin = pEnvFull.XMin;
57 Ymin = pEnvFull.YMin;
58 Xmax = pEnvFull.XMax;
59 Ymax = pEnvFull.YMax;
60 widthFullEnv = pEnvFull.Width;
61 heightFullenv = pEnvFull.Height;
62 lblLeftBottomFull.Text = Math.Round(pEnvFull.XMin, 2).ToString() + "," + Math.Round(pEnvFull.YMin, 2).ToString();
63 lblRightTopFull.Text = Math.Round(pEnvFull.XMax, 2).ToString() + "," + Math.Round(pEnvFull.YMax, 2).ToString();
64 lblWf.Text = pEnvFull.Width.ToString();
65
66
67 if (Ymax > ymax && ymin > Ymin)
68 {
69 vscrollMaxium = (int)(heightFullenv / 100);
70 Yvalue = (int)( (Ymax - ymax) / 100);
71 Ylarge = (int)(h / 100);
72 if (Yvalue + Ylarge > vscrollMaxium)
73 {
74 Yvalue = vscrollMaxium - Ylarge;
75 }
76 }
77 else if (ymax > Ymax)
78 {
79 vscrollMaxium = (int)((ymax - Ymin) / 100);
80 Yvalue = 0;
81 Ylarge = (int)(h / 100);
82 }
83 else if (Ymin > ymin)
84 {
85 vscrollMaxium = (int)((Ymax - ymin) / 100);
86 Ylarge = (int)(h / 100);
87 Yvalue = vscrollMaxium - Ylarge + 3;
88 }
89 this.vScrollBar1.Maximum = vscrollMaxium;
90 this.vScrollBar1.LargeChange = Ylarge;
91 this.vScrollBar1.Value = Yvalue;
92 this.vScrollBar1.SmallChange = (int)(4 * (initScale / pMapControl.MapScale));
93
94
95 if (Xmax > xmax && xmin > Xmin)
96 {
97 hscrollMaxium = (int)(widthFullEnv / 100);
98 Xvalue = (int)((xmin - Xmin) / 100);
99 Xlarge = (int)(w / 100);
100 if (Xvalue + Xlarge > hscrollMaxium)
101 {
102 Xvalue = hscrollMaxium - Xlarge;
103 }
104 }
105 else if (xmax > Xmax)
106 {
107 hscrollMaxium = (int)((xmax - Xmin) / 100);
108 Xlarge = (int)(w / 100);
109 Xvalue = hscrollMaxium - Xlarge + 3;
110 }
111 else if (Xmin > xmin)
112 {
113 hscrollMaxium = (int)((Xmax - xmin) / 100);
114 Xvalue = 0;
115 Xlarge = (int)(w / 100);
116 }
117 this.hScrollBar1.Maximum = hscrollMaxium;
118 this.hScrollBar1.LargeChange = Xlarge;
119 this.hScrollBar1.Value = Xvalue;
120 this.hScrollBar1.SmallChange = (int)(4 * (initScale / pMapControl.MapScale));
121
122
123
124 lblYscroll.Text = "Large:" + Ylarge.ToString() + ",Value:" + Yvalue.ToString() +
125 ",Small:" + vScrollBar1.SmallChange.ToString() + ",Max:" + vScrollBar1.Maximum.ToString();
126 }
127
128
129 private void btnSetDemo_Click(object sender, EventArgs e)
130 {
131 int max = 0;
132 int value = 0;
133 int smallchange = 0;
134 int largechange = 0;
135 int.TryParse(this.txtSmallChange.Text, out smallchange);
136 int.TryParse(this.txtMaxinum.Text, out max);
137 int.TryParse(this.txtValue.Text, out value);
138 int.TryParse(txtLargeChange.Text, out largechange);
139 this.vScrollBar3.Maximum = max;
140 this.vScrollBar3.SmallChange = smallchange;
141 this.vScrollBar3.LargeChange = largechange;
142 this.vScrollBar3.Value = value;
143 }
144
145 private void vScrollBar1_Scroll(object sender, ScrollEventArgs e)
146 {
147 this.axMapControl1.OnExtentUpdated -= this.axMapControl1_OnExtentUpdated;
148 double newheight = (e.OldValue - e.NewValue) * 100;
149 pEnvMap.Offset(0, newheight);
150 this.pMapControl.Extent = pEnvMap;
151 this.axMapControl1.OnExtentUpdated += this.axMapControl1_OnExtentUpdated;
152 }
153
154 private void hScrollBar1_Scroll(object sender, ScrollEventArgs e)
155 {
156 this.axMapControl1.OnExtentUpdated -= this.axMapControl1_OnExtentUpdated;
157 double w = (e.NewValue - e.OldValue) * 100;
158 pEnvMap.Offset(w, 0);
159 this.pMapControl.Extent = pEnvMap;
160 this.axMapControl1.OnExtentUpdated += this.axMapControl1_OnExtentUpdated;
161 }
162
163
164 }
165 }