1: 接着第一篇文章,继续,这是在frmain.cs文件中除了第一篇文章里的代码外的第二部分:
2: //*******************************
3:
4: #region 创建自定义工具,用来测量距离(能折线)和测量面积
5: //****************************888
6: private void mapmain_polytoolused(object sender, axmapxlib.cmapxevents_polytoolusedevent e) //在创建好自己定义的工具后,会根据工具id来选择执行
7:
8: {
9:
10: if(e.toolnum == 10)//测量距离,这是自定义工具,测量多点的距离
11:
12: {
13:
14: mapxlib.points pts = (mapxlib.points)e.points;
15:
16: mapxlib.point pt1,pt2;
17:
18: double d=0.0;
19:
20: //计算顺序两个点距离,累计得到总距离
21:
22: for(int i=1;i<pts.count;i++)
23:
24: {
25:
26: pt1=pts._item(i);
27:
28: pt2=pts._item(i+1);
29:
30: d += axmap1.distance(pt1.x,pt1.y,pt2.x,pt2.y);
31:
32: }
33:
34: label1.text="距离:" + d.tostring();
35:
36: }
37:
38: else if(e.toolnum == 11) //面积,这是自定义工具,这里借用了某位网友的文章,谢谢
39:
40: {
41:
42: mapxlib.points pts = (mapxlib.points)e.points;
43:
44: mapxlib.featurefactory dd = axmap1.featurefactory;
45:
46: mapxlib.style style = axmap1.defaultstyle;
47:
48: label1.text="面积:" + dd.createregion(pts,style).area.tostring();
49:
50: }
51:
52: }
53: #endregion
54: //*******************************
55:
56: private void axmap1_mapviewchanged(object sender, system.eventargs e) //在地图大小改动时,显示出比例
57: {
58: label1.text=axmap1.zoom.tostring();
59: }
60:
61: //*******************************
62: private void mutuceng_click(object sender, system.eventargs e) //菜单按钮事件,显示图层控制面板
63: {
64: axmap1.layers.layersdlg(null,null);
65: }
66:
67: private void menuitem31_click(object sender, system.eventargs e) //菜单按钮事件,显示图层图层选择显示窗口
68: {
69: frmviewlyr frm=new frmviewlyr();
70: frm.owner=this;
71: frm.showdialog();
72: }
73: private void menuitem32_click(object sender, system.eventargs e) //菜单按钮事件,在新窗口中控制图层的显示比例等,
74: {
75: #region 新窗口中控制图层的显示比例,此处是省略代码
76: //***********此处省略,主要使用到的是 mapunit 和mapzoom *******************
77: //此处是伪代码,是mapx5.0的示例程式的vb代码,和上面的大同小异
78: //
79: // zoomtext.text = fmainform.map1.zoom
80:
81: // set the unit combo box to the current unit
82:
83: // take a short cut: units # 0 through 13 correspond to combo list number
84:
85: // if fmainform.map1.mapunit < 14 then
86:
87: // unitcombo.listindex = fmainform.map1.mapunit
88:
89: // else
90:
91: // select case fmainform.map1.mapunit
92:
93: // case miunitlink
94:
95: // unitcombo.listindex = 14
96:
97: // case miunitchain
98:
99: // unitcombo.listindex = 15
100:
101: // case miunitrod
102:
103: // unitcombo.listindex = 16
104:
105: // end select
106:
107: // end if
108:
109:
110:
111: // save the current parameters so that the view can be
112:
113: // restored if "cancel" is pressed
114:
115: // oldzoom = fmainform.map1.zoom
116:
117: // oldunit = fmainform.map1.mapunit
118: #endregion
119:
120: }
121: //*******************************
122: private void axmap1_thememodifyrequested(object sender, axmapxlib.cmapxevents_thememodifyrequestedevent e)
123: {
124: //e.theme
125: }
126:
127: private void axmap1_mousedownevent(object sender, axmapxlib.cmapxevents_mousedownevent e)
128: {
129: //e.button=
130: }
131:
132: private void menuitem4_click(object sender, system.eventargs e) //菜单按钮事件,普通选择地图
133: {
134: axmap1.currenttool=mapxlib.toolconstants.miselecttool;
135: menuitem4.radiocheck=true;
136: }
137:
138: private void menuitem5_click(object sender, system.eventargs e) //菜单按钮事件,长方形选择地图
139: {
140: axmap1.currenttool=mapxlib.toolconstants.mirectselecttool;
141: menuitem5.radiocheck=true;
142: }
143:
144: private void menuitem6_click(object sender, system.eventargs e) //菜单按钮事件,圆形选择地图
145: {
146: axmap1.currenttool=mapxlib.toolconstants.miradiusselecttool;
147: menuitem6.radiocheck=true;
148: }
149:
150: private void menuitem7_click(object sender, system.eventargs e)
151: {
152: axmap1.currenttool=mapxlib.toolconstants.mipolygonselecttool; //菜单按钮事件,多边形选择地图
153: menuitem7.radiocheck=true;
154: }
155:
156: private void menuitem8_click(object sender, system.eventargs e)
157: {
158: axmap1.currenttool=mapxlib.toolconstants.milabeltool; //菜单按钮事件,直线标注地图
159: }
160:
161: private void menuitem9_click(object sender, system.eventargs e)
162: {
163: //axmap1.currenttool=mapxlib.toolconstants. ; //菜单按钮事件,折线标注地图
164: }
165:
166: private void menuitem11_click(object sender, system.eventargs e)
167: {
168: axmap1.currenttool=mapxlib.toolconstants.misymboltool; //菜单按钮事件,创建工具,能在地图上添加符号,其实是对 mapx 的 annotations 操作
169: }
170:
171: private void menuitem12_click(object sender, system.eventargs e)
172: {
173: axmap1.currenttool=mapxlib.toolconstants.mitexttool; //菜单按钮事件,创建工具,能在地图上添加文本,其实是对 mapx 的 annotations 操作
174: }
175:
176: private void menuitem13_click(object sender, system.eventargs e)
177: {
178: axmap1.annotations.removeall(); // 把注释信息全部移除, 其实是对 mapx 的 annotations 操作
179: }
180:
181: private void menuitem14_click(object sender, system.eventargs e)
182: {
183: gistestbymyself.frmannotation frm=new frmannotation( axmap1.defaultstyle.clone() );
184: frm.owner=this;
185: frm.showdialog(); // //未完成的,参见d:\program files\mapinfo\mapx 5.0\samples50\visualbasic\vb5sample
186: }
187:
188: private void menuitem16_click(object sender, system.eventargs e) //菜单按钮事件,显示属性窗口
189: {
190: axmap1.propertypage();
191: }
192:
193: private void menuitem19_click(object sender, system.eventargs e) //显示mapx的关于对话框
194: {
195: axmap1.aboutbox();
196: }
197:
198: private void menuitem29_click(object sender, system.eventargs e) //菜单按钮事件,调用窗口,对地图的坐标进行改动,或叫投影
199: {
200: axmap1.displaycoordsys.pickcoordsys(null,null);
201: axmap1.numericcoordsys=axmap1.displaycoordsys;
202: }
203:
204: private void axmap1_mouseupevent(object sender, axmapxlib.cmapxevents_mouseupevent e) //鼠标事件,点击右键,弹出属性框
205: {
206: if(e.button==2)
207: axmap1.propertypage();
208: }