版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領
文檔簡介
1、Copyright 2001, 2002 ESRI. All rights reserved.Introduction to Programming ArcObjects with VBA第四講第四講 ArcEngine的控件的控件(C# 第二章)第二章)主要內(nèi)容主要內(nèi)容u常用控件簡介常用控件簡介uMapControl控件控件uPageLayoutControl控件控件uToolBarControl控件控件uTocControl控件控件uGlobeControl球體控件;球體控件;uSceneControl場景控件;場景控件;1、所有控件簡介、所有控件簡介u地圖控件(地圖控件(MapContr
2、ol););u頁面布局控件(頁面布局控件(PageLayoutControl););u工具條控件(工具條控件(ToolBarControl););u內(nèi)容表控件(內(nèi)容表控件(TocControl););u球體控件(球體控件(GlobeControl););u場景控件場景控件 (SceneControl););uLicense控件(控件(LicenseControl) ; u 地圖控件地圖控件 頁面布局控件頁面布局控件u球體控件球體控件 場景控件場景控件工具條控件(工具條控件(ToolBarControl)地圖導航工具要素選擇工具圖形元素工具頁面布局工具u內(nèi)容表控件內(nèi)容表控件TocControl
3、控件的屬性、方法控件的屬性、方法u每一個每一個ArcGIS控件都設置了其相應的屬性供開發(fā)環(huán)境來進行控件都設置了其相應的屬性供開發(fā)環(huán)境來進行可視化的設置可視化的設置, 控件中已經(jīng)包含了所要使用的方法,控件中已經(jīng)包含了所要使用的方法,u可以右擊控件并且選擇屬性,這個屬性頁就顯示你所能選擇可以右擊控件并且選擇屬性,這個屬性頁就顯示你所能選擇的屬性和方法允許開發(fā)者建立自己的的屬性和方法允許開發(fā)者建立自己的GIS應用程序,而不用寫應用程序,而不用寫任何代碼,通過屬性頁提供了設置其的關聯(lián)(任何代碼,通過屬性頁提供了設置其的關聯(lián)(buddy)控件)控件并且快速開發(fā)運行并且快速開發(fā)運行2 MapControl
4、控件控件u MapControl控件的接口介紹控件的接口介紹uMapControl控件與控件與MxD文件文件u鼠標與控件的交互鼠標與控件的交互u數(shù)據(jù)選擇數(shù)據(jù)選擇u鷹眼程序鷹眼程序 2.1 MapControl控件的接口介紹控件的接口介紹uIMapControlDefaultuIMapControl2uIMapControl3uIMapControlEvents22.2 MapControl控件與控件與MxD文件文件MapControl控件提供的控件提供的MxD數(shù)據(jù)接口有:數(shù)據(jù)接口有:u檢查檢查MXD文件存在不存在:文件存在不存在:CheckMxFile;u導入導入MXD文件:文件:LoadMx
5、File;u讀讀MXD文件:文件:ReadMxMaps;u以及文檔名稱:以及文檔名稱:DocumentFileName, 打開打開MxD文件實例文件實例 (C#)private void LoadMapDocument()System.Windows.Forms.OpenFileDialog openFileDialog2;openFileDialog2 = new OpenFileDialog();openFileDialog2.Title = Open Map Document;openFileDialog2.Filter = Map Documents (*.mxd)|*.mxd;ope
6、nFileDialog2.ShowDialog();string sFilePath = openFileDialog2.FileName;if (axMapControl1.CheckMxFile(sFilePath)axMapControl1.MousePointer =esriControlsMousePointer.esriPointerHourglass;axMapControl1.LoadMxFile(sFilePath, 0,Type.Missing);axMapControl1.MousePointer =esriControlsMousePointer.esriPointer
7、Default;打開打開MxD文件實例文件實例 (C#) private void LoadMapDocument2() 省略省略openFileDialog2相關語句相關語句string sFilePath = openFileDialog2.FileName;if (axMapControl1.CheckMxFile(sFilePath)IArray pArray ; int i ; IMap pMap;pArray = axMapControl1.ReadMxMaps(sFilePath,Type.Missing);for(i = 0;i=pArray.Count -1;i+)pMap
8、= pArray.get_Element(i) as IMap;if (pMap.Name = Layers)axMapControl1.LoadMxFile(sFilePath, i, Type.Missing); break; /核對核對C#書上代碼,檢查書上錯誤書上代碼,檢查書上錯誤 利用利用IMapDocument 打開文檔打開文檔(C# P21-23)MapDocument 類提供的地圖文檔文件類提供的地圖文檔文件(.mxd, .mxt, .pmf) 和層文件及提供屬性和方法來訪和層文件及提供屬性和方法來訪問和更新這個地圖文檔,以及設置地圖文檔的屬性,可以讀、寫、保存地圖文件問和更新
9、這個地圖文檔,以及設置地圖文檔的屬性,可以讀、寫、保存地圖文件 (.mxd)。Open(),Save(),SaveAs()IMapDocument m_MapDocument; private void LoadMapDoc() m_MapDocument = new MapDocumentClass(); try /省略省略openFileDialog2相關語句相關語句string sFilePath = openFileDialog2.FileName;m_MapDocument.Open(sFilePath, ); int i; for (i = 0; i = pMapDocument.
10、MapCount - 1; i+) axMapControl1.Map = m_MapDocument.get_Map(i); axMapControl1.Refresh(); catch (Exception ex)MessageBox.Show(ex.ToString(); 利用利用IMapDocument 保存文檔保存文檔(C#)MapDocument 類提供的地圖文檔文件類提供的地圖文檔文件(.mxd, .mxt, .pmf) 和層文件及提供屬性和方法來訪和層文件及提供屬性和方法來訪問和更新這個地圖文檔,以及設置地圖文檔的屬性,可以讀、寫、保存地圖文件問和更新這個地圖文檔,以及設置地圖
11、文檔的屬性,可以讀、寫、保存地圖文件 (.mxd)。Open(),Save(),SaveAs()private void SaveAsDocument() /省略省略saveFileDialog1相關語句相關語句 string sFilePath = saveFileDialog1.FileName; if (sFilePath = ) return; if (sFilePath = m_MapDocument.DocumentFilename) if (m_MapDocument.get_IsReadOnly(m_MapDocument.DocumentFilename) = true) M
12、essageBox.Show(This map document is read only!); return; m_MapDocument.Save(m_MapDocument.UsesRelativePaths, true); else m_MapDocument.SaveAs(sFilePath, true, true);MessageBox.Show(Document saved successfully!); 2.3鼠標與控件的交互(代碼實例鼠標與控件的交互(代碼實例 )u使用鼠標拖放確定地圖的顯示范圍(即:放大工具的實現(xiàn)使用鼠標拖放確定地圖的顯示范圍(即:放大工具的實現(xiàn) )axMa
13、pControl1.Extent = axMapControl1.TrackRectangle();axMapControl1.ActiveView .PartialRefresh (esriViewDrawPhase.esriViewGeography, null, null);u移動地圖移動地圖在在MapControl中中onMouseDown事件中調(diào)用事件中調(diào)用 MapControl.pan繪制圖形繪制圖形2.3鼠標與控件的交互鼠標與控件的交互-繪制多邊形繪制多邊形u繪制圖形繪制圖形 C# (在在AxMapControl1_MouseDown事件中調(diào)用事件中調(diào)用) private voi
14、d DrawMapShape() IGeometry pGeom = axMapControl1.TrackPolygon(); IRgbColor pColor; pColor = new RgbColorClass(); pColor.Red = 220; pColor.Green = 112; pColor.Blue = 60; ISimpleFillSymbol pFillsyl; pFillsyl = new SimpleFillSymbolClass(); pFillsyl.Color = pColor; object oFillsyl = pFillsyl; axMapContr
15、ol1.DrawShape(pGeom, ref oFillsyl); 2.3鼠標與控件的交互鼠標與控件的交互-繪制多邊形繪制多邊形修改以上代碼,可實現(xiàn)以下功能修改以上代碼,可實現(xiàn)以下功能 (P27-29)u繪制多邊形繪制多邊形u繪制矩形繪制矩形u繪制繪制圓圓u繪制繪制點點u繪制線繪制線2.4鷹眼程序鷹眼程序 (C#) P30-32u1)在窗體)在窗體axMapControl1 的OnMapReplaced 事件中加載事件中加載uForm1_load()IMap pMap;pMap = axMapControl1.Map;int i ;for( i = 0; i= pMap.LayerCoun
16、t - 1;i+)axMapControl2.Map.AddLayer(pMap.get_Layer(i);2.4鷹眼程序鷹眼程序2)AxMapControl1_OnExtentUpdated事件中加載事件中加載IEnvelope pEnv ;pEnv = e.newEnvelope as IEnvelope;IGraphicsContainer pGraphicsContainer;IActiveView pActiveView;pGraphicsContainer = axMapControl2.Map as IGraphicsContainer;pActiveView = pGraphi
17、csContainer as IActiveView;pGraphicsContainer.DeleteAllElements();獲取矩形坐標獲取矩形坐標IRectangleElement pRectangleEle;pRectangleEle = new RectangleElementClass();IElement pEle;pEle = pRectangleEle as IElement;pEle.Geometry = pEnv; 2.4鷹眼程序鷹眼程序2)AxMapControl1_OnExtentUpdated事件中加載事件中加載設置矩形的邊線顏色設置矩形的邊線顏色IRgbCol
18、or pColor;pColor = new RgbColorClass();pColor.RGB =255;pColor.Transparency = 255; ILineSymbol pOutline;pOutline = new SimpleLineSymbolClass();pOutline.Width = 1;pOutline.Color = pColor;pColor=new RgbColorClass();pColor.RGB = 255;pColor.Transparency = 0; 2.4鷹眼程序鷹眼程序2)AxMapControl1_OnExtentUpdated事件中加
19、載事件中加載設置填充符號的屬性設置填充符號的屬性IFillSymbol pFillSymbol;pFillSymbol = new SimpleFillSymbolClass();pFillSymbol.Color = pColor;pFillSymbol.Outline = pOutline;構(gòu)建矩形元素構(gòu)建矩形元素IFillShapeElement pFillshapeEle;pFillshapeEle = pEle as IFillShapeElement;pFillshapeEle.Symbol = pFillSymbol;pEle = pFillshapeEle as IElemen
20、t;將矩形元素增加到圖形容器中,繪制將矩形元素增加到圖形容器中,繪制pGraphicsContainer.AddElement(pEle, 0);pActiveView.PartialRefresh(esriViewDrawPhase.esriViewGraphics, null, null);2.4鷹眼程序鷹眼程序3)在)在AxMapControl2_OnMouseDown事件中加載事件中加載 IEnvelope pEnv = AxMapControl2.TrackRectangle(); AxMapControl1.Extent = pEnv; AxMapControl1.Refresh(
21、);dAxMapControl1AxMapControl22.5 數(shù)據(jù)選擇數(shù)據(jù)選擇u調(diào)用調(diào)用SearchByShape()方法方法 在在OnMouseDown事件中調(diào)用事件中調(diào)用 C#u多邊形選擇要素多邊形選擇要素IGeometry pGeom = axMapControl1.TrackPolygon();axMapControl1.Map.ClearSelection();axMapControl1. ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);axMapControl1.Map.Se
22、lectByShape(pGeom, null, false);axMapControl1. ActiveView.PartialRefresh(esriViewDrawPhase.esriViewGeoSelection,null,null);清空選擇集清空選擇集AxMapControl.Map.ClearSelection();AxMapControl.ActiveView.Refresh();2.5 數(shù)據(jù)選擇數(shù)據(jù)選擇修改以上代碼,可實現(xiàn)以下功能修改以上代碼,可實現(xiàn)以下功能 (P32-34)u多邊形選擇多邊形選擇u拉框選擇拉框選擇u圓選擇圓選擇u點選點選3 PageLayoutContro
23、l控件控件u控件簡介控件簡介uPageLayoutControl操作操作MXD文件文件uPageLayout控件與控件與Map控件聯(lián)動控件聯(lián)動u繪制繪制MapSurround對象對象u其他功能其他功能3.1控件簡介控件簡介uPageLayout管理著布局視圖提供給用戶者進行輸出、打印,當然在這個控件中提管理著布局視圖提供給用戶者進行輸出、打印,當然在這個控件中提供了要素連接(增加、刪除等)我們可以來看看有那些可以使用的資源:供了要素連接(增加、刪除等)我們可以來看看有那些可以使用的資源:u 打?。ù蛴。≒rinter):這里是指打印機的連接、打印大小、頁面設置及其他設置,):這里是指打印機的連
24、接、打印大小、頁面設置及其他設置,主要是打印機方面的設置。主要是打印機方面的設置。u 頁面(頁面(Page):管理著可視或屏幕的打印機頁。):管理著可視或屏幕的打印機頁。u 要素(要素(Elements):): 在頁面上畫地圖要素。在頁面上畫地圖要素。u 圖形(圖形(Graphics):在頁面上畫地圖要素,地圖包括圖框():在頁面上畫地圖要素,地圖包括圖框(MapFrames),),PageLayout對象有對象有MapFrame對象并且一個對象并且一個MapFrame有一個地圖,反過來,每有一個地圖,反過來,每一個地圖都有相關聯(lián)的圖層和地圖范圍(一個地圖都有相關聯(lián)的圖層和地圖范圍(MapSu
25、rrounds),每一個),每一個MapSurround 又關聯(lián)著一個又關聯(lián)著一個MapSurroundFrame. MapSurrounds包括圖例、包括圖例、指北針、比例尺以及另外畫的一些地圖要素,當然也支持地圖表現(xiàn)及圖片要素,指北針、比例尺以及另外畫的一些地圖要素,當然也支持地圖表現(xiàn)及圖片要素,其實說白了,主要是這幾種類型:其實說白了,主要是這幾種類型:FrameElements(MapFrame、MapSurroundFrame)、)、GraphicElements、PictureElements3.2 PageLayout操作操作mxd文件文件u利用利用IMapDocument接口操
26、作接口操作mxd文件(文件(C#)IMapDocument pMapDocument;private void OpenMapDocument()pMapDocument = new MapDocumentClass();try/省略省略openFileDialog1語句語句string sFilePath = openFileDialog1.FileName;pMapDocument.Open(sFilePath, );axPageLayoutControl1.PageLayout = pMapDocument.PageLayout;axPageLayoutControl1.Refresh(
27、);catch( Exception ex)MessageBox.Show(ex.ToString();3.3PageLayout控件與控件與Map控件聯(lián)動控件聯(lián)動(C#) P35u同步控件同步控件:如果你擁有一個如果你擁有一個MapDocument對象,對象,Map和和PageLayout對象僅僅能對象僅僅能關聯(lián)其中的一個控件,如果你要共享視圖,你必須克隆對象到另外一個控件中,關聯(lián)其中的一個控件,如果你要共享視圖,你必須克隆對象到另外一個控件中, private void axMapControl1_OnAfterDraw(object sender, IMapControlEvents2_
28、OnAfterDrawEvent e) IObjectCopy objectCopy = new ObjectCopyClass();object toCopyMap = axMapControl1.Map;object copiedMap = objectCopy.Copy(toCopyMap);object toOverwriteMap = axPageLayoutControl1.ActiveView.FocusMap;/傳遞數(shù)據(jù)傳遞數(shù)據(jù)()objectCopy.Overwrite(copiedMap, ref toOverwriteMap); axPageLayoutControl1.
29、ActiveView.Refresh(); / using ESRI.ArcGIS .esriSystem ;3.4繪制繪制MapSurround對象對象 (C#)MapSurround是指南針、比例尺和圖例一類的對象是指南針、比例尺和圖例一類的對象創(chuàng)建一個創(chuàng)建一個MapSurround對象,指明對象,指明 類型類型UID,名稱,名稱 strName, 位置位置pEnv, 所屬的所屬的PageLayOut private IMapSurround CreateSurround(UID pID, IEnvelope pEnv, string strName, IPageLayout pPageL
30、ayout) IGraphicsContainer pGraphicsC ; IActiveView pActiveView; IMapFrame pMapFrame ; IMapSurroundFrame pMapSFrame ; IElement pElement ; IMap pMap ; pGraphicsC = (IGraphicsContainer)pPageLayout ; pActiveView = (IActiveView)pPageLayout; pMap = pActiveView.FocusMap; pMapFrame = (IMapFrame)pGraphicsC.F
31、indFrame(pMap); pMapSFrame = pMapFrame.CreateSurroundFrame(pID, null); 3.4繪制繪制MapSurround對象對象MapSurround是指南針、比例尺和圖例一類的對象是指南針、比例尺和圖例一類的對象創(chuàng)建一個創(chuàng)建一個MapSurround對象,指明對象,指明 類型類型UID,名稱,名稱 strName, 位置位置pEnv, 所屬的所屬的PageLayOut.pMapSFrame.MapSurround.Name = strName; pElement = (IElement)pMapSFrame; pElement.Geo
32、metry = pEnv; pElement.Activate(pActiveView.ScreenDisplay); ITrackCancel pTrack ; pTrack = new CancelTracker(); pElement.Draw(pActiveView.ScreenDisplay, pTrack); pGraphicsC.AddElement(pElement, 0); return pMapSFrame.MapSurround; public void AddMapSurrounds(IEnvelope pEnv) IMapSurround pMapSurround;
33、UID pID = new UIDClass(); pID.Value = esriCarto.MarkerNorthArrow; pMapSurround = CreateSurround(pID, pEnv, North Arrow, axPageLayoutControl1.PageLayout); uusing ESRI.ArcGIS.Geometry;uusing ESRI.ArcGIS.Display ;uusing ESRI.ArcGIS.Carto ;3.4繪制繪制MapSurround對象對象 (C#)u可修改代碼,完成指南針、比例尺和圖例等一類的對象添加可修改代碼,完成指南
34、針、比例尺和圖例等一類的對象添加uP36-41為利用為利用symbologyControl 添加指南針、比例尺和圖添加指南針、比例尺和圖例等對象,較復雜,可以后完善學習。例等對象,較復雜,可以后完善學習。3.5 其他功能其他功能u在在PageLayoutControl控件中提供了高性能的方法來幫助開發(fā)者來操作要控件中提供了高性能的方法來幫助開發(fā)者來操作要素:素:uAddElement: 添加要素到布局視圖中(添加要素到布局視圖中(PageLayout)其中有幾何對象、)其中有幾何對象、符號、名稱和符號、名稱和Z次序。當創(chuàng)建一個新的要素的時候可以利用次序。當創(chuàng)建一個新的要素的時候可以利用AddE
35、lement方法的時候就給名稱,或者通過方法的時候就給名稱,或者通過IElementProperties 接口來修改名稱。接口來修改名稱。uFindElementByName: 通過輸入一些要素的參數(shù)進行要素的查找,當然通過輸入一些要素的參數(shù)進行要素的查找,當然可以查找多個滿足條件的要素,可以查找多個滿足條件的要素,GraphicsContainer: 另外一種方法就是通過另外一種方法就是通過IActiveView:GraphicsContainer屬性來反回一個屬性來反回一個PageLayout控件的地控件的地圖容器圖容器 每個每個GraphicsContainer 都與一個都與一個Map進
36、行關聯(lián),我們可以看進行關聯(lián),我們可以看下面的實例如何使用它們:下面的實例如何使用它們:4. TOC控件控件4. TOC控件控件u控件簡介控件簡介u控件成員及函數(shù)控件成員及函數(shù)u控件的事件控件的事件4.1 TOCControl控件簡介控件簡介TOCControl是一個標準的是一個標準的ActiveX組件(組件(TOCControl.ocx),TOCControl運用設置伙伴(運用設置伙伴(buddy)控件來交互式樹狀顯)控件來交互式樹狀顯示它關聯(lián)的地圖,并且進行符號化顯示與地圖保持同步,示它關聯(lián)的地圖,并且進行符號化顯示與地圖保持同步, 這這buddy可以在控件的屬性對話框中進行設置,可以在控件
37、的屬性對話框中進行設置,也可以通過也可以通過SetBuddyControl 方法來進行設置方法來進行設置4.2 TOCControl 成員成員uBuddy: 這個這個Buddy返回返回SetBuddyControl 方法來設置其的一個對象方法來設置其的一個對象,這個,這個Buddy一定會跟一個一定會跟一個ActiveView關聯(lián)并且包含了關聯(lián)并且包含了maps, layers,和和symbols。uSetBuddyControl: 通過通過SetBuddyControl方法對方法對MapControl,、PageLayoutControl,、SceneControl,、GlobeControl
38、, ReaderControl,控件來設置其控件來設置其buddy,當然如果沒有進行設置,這個,當然如果沒有進行設置,這個屬性值將是屬性值將是Nothing。uSetActiveView: 運用這種方法來設置運用這種方法來設置ActiveView ,它可以是,它可以是IMapControl2:ActiveView,IPageLayoutControl:ActiveView,ISceneControl:Scene或者或者IGlobeControl:Globe, 這個這個SetActiveView 方法當方法當Buddy 為為Nothing時則將設置失敗。時則將設置失敗。4.2 TOCContro
39、l 成員成員uLabelEdit: 運用運用LabelEdit 來決定是否要在控件上進行來決定是否要在控件上進行l(wèi)abel 的編輯的編輯操作或者交互作用,默認情況下,操作或者交互作用,默認情況下, label editing 編輯是自動的,你可編輯是自動的,你可以編輯以編輯map, layer, heading, 和和legend class label, 點一下是選擇,點一下是選擇,點兩下進行編輯點兩下進行編輯label,正常情況下都是用自動來編輯,你可以設置不,正常情況下都是用自動來編輯,你可以設置不自動自動edit labels不被選擇,這樣你可以在不被選擇,這樣你可以在OnBeginL
40、abelEdit 和和OnEndLabelEdit 事件中進行編輯操作事件中進行編輯操作uLayerVisibilityEdit: 運用運用LabelVisibilityEdit來決定是否圖層可見,來決定是否圖層可見,你可以通過這個屬性來設置圖層的可見性。你可以通過這個屬性來設置圖層的可見性。uMousePointer: 當你在當你在TOCControl控件上要修改控件上要修改mouse pointer的的時候,你將可以在用戶等待進程及操作結(jié)束時把時候,你將可以在用戶等待進程及操作結(jié)束時把esriPointerArrowHourglass 設置成設置成11來進行操作來進行操作4.3 TOCCo
41、ntrol 事件事件u這里我們指的事件是當你與這里我們指的事件是當你與TOCControl 進行編輯名稱、移動進行編輯名稱、移動mouse,按,按鍵盤時進行的互相交互而觸發(fā)的事件。鍵盤時進行的互相交互而觸發(fā)的事件。uOnBeginLabelEdit/OnEndLabelEdit: u事件觸發(fā)之前和事件觸發(fā)之前和labels編輯事件觸發(fā)之后,當你鼠標點坐標(編輯事件觸發(fā)之后,當你鼠標點坐標(X,Y)并且)并且進行編輯觸發(fā)的事件,通過進行編輯觸發(fā)的事件,通過CanEdi指定是否進行修改,當你運用指定是否進行修改,當你運用HitTest 方法來決定你要開始進行編輯的項時,這個事件在你設置手動的時候觸
42、發(fā)方法來決定你要開始進行編輯的項時,這個事件在你設置手動的時候觸發(fā)uOnMouseDown/OnMouseMove/OnMouseUp/OnDoubleClick: u這些事件和其他的控件一樣,當鼠標按下時觸發(fā),當鼠標移動時觸發(fā)等,這些事件和其他的控件一樣,當鼠標按下時觸發(fā),當鼠標移動時觸發(fā)等,這些事件最主要的是能獲得一個這些事件最主要的是能獲得一個X,Y的坐標,當然你也可以通過這些來判的坐標,當然你也可以通過這些來判斷斷Shift和其他你想獲得的鍵值。和其他你想獲得的鍵值。OnKeyDown/OnKeyUp: u當鼠標移開或鍵值進行釋放時觸發(fā),設置當鼠標移開或鍵值進行釋放時觸發(fā),設置KeyI
43、ntercept屬性為屬性為True來控制來控制這些事件的觸發(fā),運用這些事件的觸發(fā),運用HitTest 方法決定用戶所點的項,并返回一個空點方法決定用戶所點的項,并返回一個空點,一個地圖,一個圖層等等,一個地圖,一個圖層等等.u下面我們可以看出如果觸發(fā)的編輯下面我們可以看出如果觸發(fā)的編輯label的事件的:的事件的:4.4 TOCControl實例實例設置圖層名稱可編輯設置圖層名稱可編輯C#private void axTOCControl1_OnBeginLabelEdit(object sender,ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnBe
44、ginLabelEditEvent e)IBasicMap map = null; ILayer layer = null; object other = null; object index = null;esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone;m_TOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index); if (item != esriTOCControlItem.esriTOCContro
45、lItemLayer)e.canEdit = false;private void axTOCControl1_OnEndLabelEdit(object sender,ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnEndLabelEditEvent e)if (e.newLabel.Trim() = ) e.canEdit = false;u運用運用HitTest方法來決定你所選擇的方法來決定你所選擇的TOC項,可保存這個項,可保存這個TOC對象項來設置相關屬性,例如:對象項來設置相關屬性,例如:4.4 TOCControl實例實例選定圖層選定圖層4.
46、4TOCControl實例實例調(diào)整圖層順序調(diào)整圖層順序u聲明全局變量聲明全局變量ITOCControl m_TOCControl;ILayer pMoveLayer;int Toindex;u在在Form_Load事件中給事件中給 m_TOCControl 賦值賦值m_TOCControl = axTOCControl1.Object as ITOCControl;u在在TOCControl的的OnMouseDown,OnMouseUp中實現(xiàn)圖中實現(xiàn)圖層順序調(diào)整層順序調(diào)整4.4TOCControl實例實例調(diào)整圖層順序調(diào)整圖層順序private void axTOCControl1_OnMous
47、eDown(object sender, ITOCControlEvents_OnMouseDownEvent e) if (e.button = 1) esriTOCControlItem item = esriTOCControlItem.esriTOCControlItemNone; IBasicMap map = null; ILayer layer = null; object other = null; object index = null; axTOCControl1.HitTest(e.x, e.y, ref item, ref map, ref layer, ref oth
48、er, ref index); if (item = esriTOCControlItem.esriTOCControlItemLayer) if (layer is IAnnotationSublayer) return; pMoveLayer = layer; 4.4TOCControl實例實例調(diào)整圖層順序調(diào)整圖層順序private void axTOCControl1_OnMouseUp(object sender, ITOCControlEvents_OnMouseUpEvent e) if (e.button = 1) esriTOCControlItem item = esriTO
49、CControlItem.esriTOCControlItemNone; IBasicMap map = null; ILayer layer = null; object other = null; object index = null; m_TOCControl.HitTest(e.x, e.y, ref item, ref map, ref layer, ref other, ref index); IMap pMap = axMapControl1.ActiveView.FocusMap; if (item = esriTOCControlItem.esriTOCControlIte
50、mLayer | layer != null) if (pMoveLayer != layer) ILayer pTempLayer; .4.4TOCControl實例實例調(diào)整圖層順序調(diào)整圖層順序 /搜索該圖層順序號搜索該圖層順序號 ILayer pTempLayer; for (int i = 0; i pMap.LayerCount; i+) pTempLayer = pMap.get_Layer(i); if (pTempLayer = layer) Toindex = i; pMap.MoveLayer(pMoveLayer, Toindex); axMapControl1.Activ
51、eView.Refresh(); m_TOCControl.Update(); break; 5. ToolbarControl控件控件5. ToolbarControl控件控件u控件簡介控件簡介u控件的事件控件的事件u控件的屬性修改控件的屬性修改u控件內(nèi)嵌的命令、菜單、工具控件內(nèi)嵌的命令、菜單、工具u控件中控件中AddItem命令的參數(shù)意義命令的參數(shù)意義u在在ToolBar上右擊顯示上右擊顯示Customize對話框,添加工具對話框,添加工具uToolBarMenus的使用的使用5.1 ToolbarControl控件簡介控件簡介uToolbarControl包含了一個工具集,命令集和菜單,
52、你也可包含了一個工具集,命令集和菜單,你也可以通過以通過ToolbarControl控件的控件的CurrentTool 屬性來設置其屬性來設置其buddy 控件,控件,u這個這個toolbar中的每項你都可以通過對象來控制,你可以通過中的每項你都可以通過對象來控制,你可以通過屬性來設置它們,或者通過屬性來設置它們,或者通過SetBuddyControl 方法來設置其方法來設置其的的Buddy,同時設置使用的工具、命令等,同時設置使用的工具、命令等5.2 ToolbarControl 事件事件uIToolbarControl 事件與事件與TOCControl類似,這個主要是有一類似,這個主要是有
53、一個個IToolbarControlEvents:OnItemClick, 當用戶在當用戶在ToolbarControl上左點鼠標時觸發(fā),如果其的項上左點鼠標時觸發(fā),如果其的項(item)是無效是無效的,則不可以觸發(fā)這個事件,當然你也可以使用的,則不可以觸發(fā)這個事件,當然你也可以使用HitTest查找查找工具菜單,以及工具菜單,以及OnMouseDown、OnMouseUp、OnMouseMove、OnDoubleClickuKey events、OnKeyDown and OnKeyUp、Button 和和 tool events、OnItemClick 、OnDoubleClick等事件:
54、等事件:5.3控件的界面屬性修改控件的界面屬性修改u你可以通過下面的屬性來進行你可以通過下面的屬性來進行toolbar的外觀進行相關設置也的外觀進行相關設置也可以直接設置,比如:可以直接設置,比如:uAppearance: 設置設置ToolbarControl 為為Flat 或或 3D,這與其他,這與其他控件是一樣的,以及以下的屬性設置都不再詳細介紹比如:控件是一樣的,以及以下的屬性設置都不再詳細介紹比如:BorderStyle、ItemAppearance、TextAlignment,uToolTips: 決定在決定在ToolbarControl控件是顯示的控件是顯示的tips的的item或
55、或通過通過ICommand:Tooltip屬性來設置。屬性來設置。uUpdateInterval: 指定指定ToolbarControl自動調(diào)用自動調(diào)用Update方法方法的時間,如果設置的時間,如果設置UpdateInterval為為0則為自動,自動的時候則為自動,自動的時候就每就每500毫秒為一次,因為這個更新設及其的一些屬性及關聯(lián)毫秒為一次,因為這個更新設及其的一些屬性及關聯(lián)的內(nèi)容,所以時間太短會影響一些性能,所以如果沒有什么的內(nèi)容,所以時間太短會影響一些性能,所以如果沒有什么特別的需求,都不用進行設置特別的需求,都不用進行設置5.4控件內(nèi)嵌的命令、菜單、工具控件內(nèi)嵌的命令、菜單、工具u
56、ToolbarItems (commands, tools, and menus)通過通過CustomizeDialog 類或者程序類或者程序, 能創(chuàng)建屬性頁和客戶化的對能創(chuàng)建屬性頁和客戶化的對話框,在創(chuàng)建(功能、命令)時,開發(fā)者只要知道話框,在創(chuàng)建(功能、命令)時,開發(fā)者只要知道ProgID或或 UID就可以使用它們,當然這是標準的工具、命令等。就可以使用它們,當然這是標準的工具、命令等。u在技術(shù)文檔在技術(shù)文檔 “Controls Commands”能夠發(fā)現(xiàn)這些內(nèi)置的能夠發(fā)現(xiàn)這些內(nèi)置的commands, menus, 和和 toolbars,在幫助文檔中輸入在幫助文檔中輸入ICommand,
57、 esriControlCommands 可可查看所有的命令、菜單、工具查看所有的命令、菜單、工具u增加內(nèi)嵌的命令、工具等示例如下:增加內(nèi)嵌的命令、工具等示例如下:5.5控件添加控件添加AddItem命令的參數(shù)意義命令的參數(shù)意義可利用可利用AddItem, AddMenuItem, 或或AddToolbarDef 方法來增加它們到方法來增加它們到Toolbar上,上,這里有些方法在這里有些方法在ToolbarControl上要指定一些參數(shù)或部分項:上要指定一些參數(shù)或部分項:uUID: 運用運用Unique identifier來增加來增加item,這部分控制用戶新建立的實例或共享的,這部分控制
58、用戶新建立的實例或共享的實例都將生成一個實例都將生成一個UID來供其調(diào)用。來供其調(diào)用。uSubtype: 運用運用ICommandSubType來定義來定義subtype,如果沒有提供,如果沒有提供IUid 或或ProgID, 那么那么ICommandSubType:GetCount 決定你要增加到?jīng)Q定你要增加到ToolbarControl中中的個數(shù),當然一個的個數(shù),當然一個subtype必須有一個必須有一個ICommandSubType 來識別來識別ICommand否否則將失敗。則將失敗。uIndex: Index是用來決定你增加的項在是用來決定你增加的項在ToolbarControl中的位
59、置,正常情況下是中的位置,正常情況下是新增加的是放在新增加的是放在ToolbarControl控件的最后一位??丶淖詈笠晃弧BeginGroup: beginGroup決定是否要在決定是否要在item之前隔斷開,默認之前隔斷開,默認beginGroup 是是 False.GroupSpacing: GroupSpacing決定了決定了separator的寬度。的寬度。uStyle: Style決定了這些決定了這些item的類型,這些命令或工具所表現(xiàn)的的類型,這些命令或工具所表現(xiàn)的bitmap, caption, 或或 both. Menus 都將會有影響,正常情況下都將會有影響,正常情況下
60、Style已經(jīng)設置成已經(jīng)設置成esriCommandStyleIconOnly,其中有四種類型可供選擇:,其中有四種類型可供選擇:esriCommandStyleTextOnly、esriCommandStyleIconOnly、esriCommandStyleIconAndText、esriCommandStyleMenuBar,5.6在在ToolBar上右擊顯示上右擊顯示Customize對話框,添加工具對話框,添加工具C#1、定義、定義Form1中的中的全局變量全局變量u private ICustomizeDialog pCustDialog;u private ICustomizeD
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
- 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 幼兒園班務工作經(jīng)驗總結(jié)與改進措施
- 公司周年晚會主持詞及節(jié)目單
- 一年級隊列訓練教學設計方案
- B2B平臺客戶維護與拓展方案
- 中學校長管理案例分析集錦
- 高中地理大氣層知識點總結(jié)提綱
- 文案寫作中關鍵詞重要性及運用技巧
- 幼托中心玩教具衛(wèi)生消毒管理規(guī)范
- 高中體育課程教學方案設計
- 電力企業(yè)風險管理與事故預防措施
- GB/T 16895.6-2014低壓電氣裝置第5-52部分:電氣設備的選擇和安裝布線系統(tǒng)
- GB/T 11018.1-2008絲包銅繞組線第1部分:絲包單線
- GB 31633-2014食品安全國家標準食品添加劑氫氣
- 麻風病防治知識課件整理
- 手術(shù)室物品清點護理質(zhì)量控制考核標準
- 消防工程監(jiān)理實施細則
- 雙排樁支護設計計算書
- 權(quán)利的游戲雙語劇本-第Ⅰ季
- 衛(wèi)生部《臭氧消毒技術(shù)規(guī)范》
- 早期復極綜合征的再認識
- 山西某2×150MW循環(huán)流化床空冷機組施工組織設計方案
評論
0/150
提交評論