CArcGISEngine開發(fā)入門教程_第1頁
CArcGISEngine開發(fā)入門教程_第2頁
CArcGISEngine開發(fā)入門教程_第3頁
CArcGISEngine開發(fā)入門教程_第4頁
CArcGISEngine開發(fā)入門教程_第5頁
已閱讀5頁,還剩42頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、窗體頂端 C#,ArcGIS Engine開發(fā)入門教程 收藏利用ArcGIS Engine、VS .NET和Windows控件開發(fā)GIS應用Dixon整理此過程說明適合那些使用.NET建立和部署應用的開發(fā)者,它描述了使用ArcGIS控件建立和部署應用的方法和步驟。你可以在下面的目錄下找到相應的樣例程序:DeveloperKitSamplesDeveloper_Guide_Scenarios ArcGIS_EngineBuilding_an_ArcGIS_Control_ApplicationMap_Viewer注:ArcGIS樣例程序不包含在ArcGIS Engine開發(fā)工具包“典型”安裝方式

2、中。如果你沒有安裝它們,則可以重新運行開發(fā)工具包安裝向導,選擇“定制”或“修改”方式,并選擇軟件開發(fā)包下的樣例項進行安裝。一、項目描述利用視窗控件建立應用程序的目標是演示并使你熟悉在微軟Visual Studio .NET API中使用標準ArcGIS控件開發(fā)和部署GIS應用所需的步聚。本節(jié)中使用了Visual Studio .NET開發(fā)環(huán)境中的MapControl、 PageLayoutControl、TOCControl和ToolbarControl等視窗控件。COM、Java和C+程序員應該參考如下章節(jié):利用ActiveX建立應用程序、利用可視化JavaBeans建立應用程序、建立命令行

3、方式的Java應用和建立命令行方式的C+應用。本節(jié)演示了創(chuàng)建查看ArcMap和ArcGIS桌面應用圖形文檔的GIS應用程序的步驟。此節(jié)包含了以下技術:l 在微軟Visual Studio .NET中加載和嵌入ArcGIS控件。l 向PageLayoutControl和MapControl中加載圖形文檔。l 設置ToolbarControl和TOCControl的綁定控件。l 處理窗口縮放。l 向ToolbarControl添加ArcGIS Engine命令和工具。l 創(chuàng)建彈出式菜單l 在TOCControl中管理標簽編輯l 在MapControl中繪制圖形。l 為MapControl、Page

4、LayoutControl和ToolbarControl創(chuàng)建定制工具。l 用戶化ToolbarControl。l 在Windows操作系統(tǒng)中部署應用。二、概述本方案使用微軟Visual Studio .NET開發(fā)環(huán)境加以實現(xiàn),并使用了ESRI interop程序集(Interop Assemblies),它服務于被放置在.NET窗體上的、位于.NET 窗體控件(.NET Windows Controls)中的ArcGIS控件,這些程序集在托管的.NET代碼和非托管的COM代碼之間起了橋梁作用。對COM ArcGIS控件(COM ArcGIS Controls)成員的引用都要經(jīng)過Interop程

5、序集,然后到達實際的COM對象。同樣,也從COM對象經(jīng)過Interop程序集到達.NET應用程序。每個ArcGIS Engine控件具有方法、屬性與事件,它們能夠被控件嵌入的容器(如,.NET窗體)訪問。每個控件對象及其功能可以與其他ESRI ArcObjects和自定義控件組合使用,創(chuàng)建用戶化的客戶應用程序。此方案是使用了C#和Visual Basic .NET兩種語言創(chuàng)建,但以下技術實現(xiàn)集中傾向于C#方案。許多開發(fā)者可能會感覺用Visual Basic .NET更舒服,那是因為他們已經(jīng)比較熟悉Visual Basic 6.0代碼,然而,對于Java和C+程序員來說,他們將會覺得對C#程序語

6、言的語法更熟悉。無論你使用哪種開發(fā)環(huán)境,對于使用ArcGIS控件的好壞既依賴于你的編程環(huán)境技術,也依賴于你所掌握的ArcObjects技術。在本方案中,使用ToolbarControl、TOCControl、PageLayoutControl和MapControl來為應用程序提供用戶界面。這些ArcGIS控件與其他ArcObjects和ArcGIS Engine命令被開發(fā)者一起使用,用來創(chuàng)建一個GIS視窗應用。三、設計此方案在設計時,首先強調了ArcGIS 控件如何互相之間進行交互,其次,向開發(fā)者解釋說明了ArcGIS 控件對象模型的一部分。每個.NET ArcGIS Engine控件包含有一

7、套能夠被嵌入其內的窗口即時訪問的屬性頁。這些屬性些為控件屬性和方法的選擇提供了捷徑,并且允許開發(fā)者不寫任何代碼即可創(chuàng)建一個應用程序。本方案并沒有使用屬性頁,而是采用寫代碼的方式建立應用程序。關于屬性頁的更進一步的信息,請參考ArcGIS開發(fā)幫助(ArcGIS Developer Help)。四、條件需求要順利地完成以下方案,你需要以下條件(對于部署的需求將在后續(xù)的部署章節(jié)涉及到):l 安裝具有授權文件的ArcGIS Engine開發(fā)工具包(Developer Kit),使之能夠用于開發(fā)。l 安裝有微軟Visual Studio .NET 2003開發(fā)環(huán)境和微軟.NET Framework 1.

8、1及其相應協(xié)議。l 熟悉微軟Windows操作系統(tǒng)和Microsoft Visual Studio .NET的工作知識,會用C#或Visual Basic .NET編程語言。當然,此方案中提供了一些如何在Microsoft Visual Studio .NET中使用ArcGIS控件的信息,但它不能替代對開發(fā)環(huán)境的培訓。l 不需要對ESRI其它軟件有足夠的經(jīng)驗,但如果以前對ArcObjects有所接觸并對ArcGIS應用(如,ArcCatalog,ArcMap)有一個基本了解,則對于開發(fā)更有利。l 訪問來自本方案的樣例數(shù)據(jù)和代碼,它位于:DeveloperKitSamplesDeveloper_

9、Guide_Scenarios ArcGIS_EngineBuilding_an_ArcGIS_Control_ApplicationMap_Viewer本方案中使用到的控件和庫如下:l AxMapControll AxTOCControll AxPageLayoutControll AxToolbarControll ESRI.ArcGIS.Cartol ESRI.ArcGIS.Systeml ESRI.ArcGIS.Displayl ESRI.ArcGIS.SystemUIl ESRI.ArcGIS.Geometryl ESRI.ArcGIS.Utilityl esriMapControl

10、l esriTOCControll esriPageLayoutControll esriToolbarControl五、實現(xiàn)下面的實現(xiàn)過程中提供了你成功完成方案所需所有代碼。假設你對于開發(fā)環(huán)境已經(jīng)有了一定的知識,所以下面沒有逐步地詳細介紹如何用Microsoft Visual Studio .NET開發(fā)應用。(一) 加載ArcGIS控件在你為應用程序編寫代碼之前,應該先將應用程序將用到的ArcGIS控件和其他ArcGIS Engine庫引用裝載到開發(fā)環(huán)境之中。1. 啟動Visual Studio .NET,并從新建項目對話框中創(chuàng)建一個新的Visual C# “Windows應用程序”項目。2

11、. 將項目命名為“Controls”,并選擇位置存取該項目。3. 在“工具箱”的“Windows窗體”標簽欄中單擊右鍵,然后從上下文菜單中選擇“添加/移除項(I)”。4. 在“自定義工具箱”中選擇“.NET Framework組件”,并復選“AxMapControl”,“AxPageLayoutControl”,“AxTOCControl”和“AxToolbarControl”,單擊確定按鈕。這樣所選擇的控件將顯示在工具箱的Windows窗體標簽欄中。5. 單擊項目菜單,并選擇“添加引用(R)”。6. 在添加引用對話框中,雙擊“ESRI.ArcGIS.Carto”,“ESRI.ArcGIS.D

12、isplay”,“ESRI.ArcGIS.Geometry”,“ESRI.ArcGIS.System”,“ESRI.ArcGIS.SystemUI”,“ESRI.ArcGIS.Utility”。單擊確定。注:對于ESRI .NET程序集,將通過具體實例來說明,并使用.NET框架提供的COM傳送服務從你的C#項目中調用ESRI對象庫中的實體對象。(二) 在容器中嵌入ArcGIS控件在你能夠訪問每個控件的事件、屬性和方法之前,需要將控件嵌入到.NET容器中。一旦將控件嵌入窗體內,它們將圖形化應用程序的用戶界面。1. 在設計模式下打開.NET窗體。2. 雙擊工具箱Windows標簽欄中的AxMapC

13、ontrol控件,將MapControl加入到窗體上。3. 再將AxPageLayoutControl、AxTOCControl和AxToolbarControl如上添加到窗體中。4. 重新調整窗體上各個控件的大小和位置,調整結果如下所示。5. 在窗體上雙擊顯示窗體代碼窗口,在代碼窗口的頂部增加“using”命令:using System;using System.Windows.Forms;/ ArcGIS Engine引用using ESRI.ArcGIS.SystemUI;using ESRI.ArcGIS.Carto;using ESRI.ArcGIS.Display;using ES

14、RI.ArcGIS.Geometry;using ESRI.ArcGIS.esriSystem;using ESRI.ArcGIS.ToolbarControl;using ESRI.ArcGIS.TOCControl;注:需注意C#是區(qū)分大小寫的。當你鍵入“ESRI.”時,智能敏感的自動完成功能將允許你通過按Tab鍵完成下一節(jié)。(三) 加載Map文檔到MapControl與PageLayoutControl 單獨的數(shù)據(jù)層或者使用ArcMap、ArcGIS桌面應用程序產(chǎn)生的圖形文檔,能夠被加載到MapControl和PageLayoutControl中。你可以加載樣例圖形文檔,或者加載你自己的

15、圖形文檔。后面你將增加一個瀏覽圖形文檔的對話框。1. 選擇Form_Load事件,并輸入下列代碼(如果你使用你自己的圖形文檔,要替換為正確的文件名):/ 使用相對路徑向PageLayoutControl加載一個圖形文檔string filename = .DataArcGIS_Engine_Developer_Guidegulf of st. lawrence.mxd;if ( axPageLayoutControl1.CheckMxFile(filename) )axPageLayoutControl1.LoadMxFile(filename, );2. 在設計模式顯示窗體并從屬性窗選擇ax

16、PageLayoutControl1控件,顯示axPageLayoutControl事件。在OnPageLayoutReplaced事件上雙擊向代碼窗口添加該事件的處理函數(shù)。3. 在axPageLayoutControl1_OnPageLayoutReplaced事件中鍵入以下向MapControl加載樣例圖形文檔的代碼。當文檔被裝載入PageLayoutControl時OnPageLayoutReplaced事件將會被觸發(fā)。private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, ESRI.ArcGIS.Pag

17、eLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEvent e)/ 加載同樣的文檔到MapControlaxMapControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename, null, null);/ 設置MapControl顯示范圍至數(shù)據(jù)的全局范圍axMapControl1.Extent = axMapControl1.FullExtent;(四) 設置ToolbarControl與TOCControl控件的綁定控件對于此應用程序,TOCControl和Toolb

18、arControl控件將與PageLayoutControl相互協(xié)作,而不是MapControl。為此PageLayoutControl必須設置為綁定控件。TOCControl使用綁定的ActiveView顯示圖形、圖層和符號。而位于ToolbarControl上的任何命令、工具或菜單項會受綁定控件的顯示影響。1. 在Form_Load事件中的加載文檔代碼的后面鍵入以下紅色部分內容:private void Form1_Load(object sender, System.EventArgs e)/ 使用相對路徑向PageLayoutControl加載一個圖形文檔string filename

19、 = .DataArcGIS_Engine_Developer_Guidegulf of st. lawrence.mxd;if ( axPageLayoutControl1.CheckMxFile(filename) )axPageLayoutControl1.LoadMxFile(filename, );/ 設置綁定控件axTOCControl1.SetBuddyControl(axPageLayoutControl1);axToolbarControl1.SetBuddyControl(axPageLayoutControl1);2. 生成并運行應用程序。圖形文檔被加載到PageLayo

20、utControl,并且TOCControl列出了圖形文檔中的數(shù)據(jù)圖層。使用TOCControl通過復選和取消復選框控制圖層的可見性。默認地,圖形文檔的焦點圖(focus map)被裝入MapControl控件。在這種當前情況下,ToolbarControl控件顯示是空的,因為沒有為它添加任何命令。試著縮放窗體,你會注意到控件不會改變尺寸。(五) 處理窗口縮放當窗口在運行時進行縮放時,PageLayoutControl和MapControl不會自動改變自身的尺寸。要改變控件的尺寸以便它們總是與匹配窗口的范圍,你必須將控件錨定在窗口上。如果PageLayoutControl或MapControl

21、包含大量的數(shù)據(jù),在窗口縮放期間重繪這些數(shù)據(jù)顯得相當重要。為了提高執(zhí)行效率,你可以禁止數(shù)據(jù)重繪直到縮放操作完成后再重繪之。在縮放時,可以用一個可伸縮的位圖來替代重繪數(shù)據(jù)。1. 在設計模式顯示窗體并從屬性窗口中選擇axPageLayoutControl1。單擊Anchor屬性,將axPageLayoutControl1錨定在窗體的頂、左、底和右部。2. 錨定axMapControl控件到窗體的頂、左和底部。3. 在Form_Load事件的開頭增加以下代碼:/ 當縮放時禁止重繪this.SetStyle(ControlStyles.EnableNotifyMessage, true);4. 向類增加

22、以下常量: public class Form1 : System.Windows.Forms.Form/ private const int WM_ENTERSIZEMOVE = 0x231;private const int WM_EXITSIZEMOVE = 0x232;/ 5. 向重載的OnNotifyMessage方法中增加下列代碼:protected override void OnNotifyMessage(Message m)base.OnNotifyMessage (m);/ 以下為手工添加的代碼if ( m.Msg = WM_ENTERSIZEMOVE)axMapContr

23、ol1.SuppressResizeDrawing(true, 0);axPageLayoutControl1.SuppressResizeDrawing(true, 0);else if ( m.Msg = WM_EXITSIZEMOVE)axMapControl1.SuppressResizeDrawing(false, 0);axPageLayoutControl1.SuppressResizeDrawing(false, 0);6. 生成并運行應用程序,試著縮放窗口。注:禁止縮放時重畫方法是通過檢查發(fā)送到窗體的Windows消息工作的。當窗口開發(fā)縮放時,Windows發(fā)送WM_ENTE

24、RSIZEMOVE窗口消息。此時,我們禁止在MapControl和PageLayoutControl上繪制圖形,而是使用“stretchy bitmap”繪制。當Windows發(fā)送WM_EXITSIZEMOVE消息時,窗體結束縮放,這時我們全部重繪新的范圍。(六) 向ToolbarControl增加命令ArcGIS Engine提供了120多個命令和工具,它們與MapControl、PageLayoutControl和ToolbarControl直接相互協(xié)作。這些命令和工具為你提供了大量的經(jīng)常使用的地圖導航、圖形管理、地物選擇等方面的GIS功能?,F(xiàn)在將在你的應用程序中增加這些命令和工具的一部分

25、。1. 在Form_Load事件中的加載文檔代碼之前添加如下代碼。/ 增加打開檔命令string progID;progID = esriControlToolsGeneric.ControlsOpenDocCommand;axToolbarControl1.AddItem(progID, -1, -1, false, 0,esriCommandStyles.esriCommandStyleIconOnly);/ 增加PageLayout導航命令progID = esriControlToolsPageLayout.ControlsPageZoomInTool;axToolbarControl

26、1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsPageLayout.ControlsPageZoomOutTool;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsPageLayout.ControlsPagePanTool;axToolbarCon

27、trol1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsPageLayout.ControlsPageZoomWholePageCommand;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsPageLayout.ControlsPageZoomPag

28、eToLastExtentBackCommand;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly); / 增

29、加地圖導航命令progID = esriControlToolsMapNavigation.ControlsMapZoomInTool;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsMapNavigation.ControlsMapZoomOutTool;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriComm

30、andStyleIconOnly);progID = esriControlToolsMapNavigation.ControlsMapPanTool;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandStyles.esriCommandStyleIconOnly);progID = esriControlToolsMapNavigation.ControlsMapFullExtentCommand;axToolbarControl1.AddItem(progID, -1, -1, true, 0,esriCommandS

31、tyles.esriCommandStyleIconOnly);/ 使用相對路徑向PageLayoutControl加載一個圖形文檔/ 2. 生成并運行應用程序?,F(xiàn)在ToolbarControl包含了ArcGIS Engine命令和工具,你可以使用它們導航加載到PageLayoutControl中的圖形文檔。使用頁面布局命令對當前的頁面布局進行導航控制,要對存在于數(shù)據(jù)框架中的數(shù)據(jù)進行導航則使用地圖命令。利用找開文檔命令可以瀏覽并加載其他的圖形文檔。(七) 給PageLayoutControl添加彈出式菜單與給跟綁定控件協(xié)作的ToolbarControl增加ArcGIS Engine命令一樣,按

32、照前面的步驟,你也可以從ArcGIS Engine命令創(chuàng)建彈出式菜單。下面將向你的應用程序中增加與PageLayoutControl協(xié)作的彈出式菜單。當在PageLayoutControl可視區(qū)域點擊鼠標右鍵的時候,彈出式菜單將顯示。1. 向類中添加如下的成員變量(紅色部分):public class Form1 : System.Windows.Forms.Formprivate ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControl

33、 axPageLayoutControl1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1;private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass(); / 彈出式菜單/ 2. 在Form_Load事件中向ToolbarControl增加命令代碼的后面加載文檔代碼的前面增加如下代碼。private void Form1_Load(

34、object sender, System.EventArgs e)/ 前面是增加地圖導航的代碼/ 共享ToolbarControl的命令池m_ToolbarMenu.CommandPool = axToolbarControl1.CommandPool;/ 向ToolbarMenu增加命令progID = esriControlToolsPageLayout.ControlsPageZoomInFixedCommand;m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndTe

35、xt);progID = esriControlToolsPageLayout.ControlsPageZoomOutFixedCommand;m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);progID = esriControlToolsPageLayout.ControlsPageZoomWholePageCommand;m_ToolbarMenu.AddItem(progID, -1, -1, false,esriCommandStyles.esriCo

36、mmandStyleIconAndText);progID = esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand;m_ToolbarMenu.AddItem(progID, -1, -1, true,esriCommandStyles.esriCommandStyleIconAndText);progID = esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand;m_ToolbarMenu.AddItem(pr

37、ogID, -1, -1, false,esriCommandStyles.esriCommandStyleIconAndText);/ 設置與PageLayoutControl掛接m_ToolbarMenu.SetHook(axPageLayoutControl1);/ 后面是加載圖形文檔的代碼/ 3. 在設計模式顯示窗體并從屬性窗口中選擇axPageLayoutControl1,顯示axPageLayoutControl事件。雙擊OnMouseDown事件,向代碼窗口中增加事件處理代碼。4. 在axPageLayoutControl1_OnMouseDown事件中增加如下代碼:privat

38、e void axPageLayoutControl1_OnMouseDown(object sender, ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnMouseDownEvent e)/ 彈出ToolbarMenuif ( e.button = 2)m_ToolbarMenu.PopupMenu(e.x, e.y, axPageLayoutControl1.hWnd);5. 生成并運行應用程序。在PageLayoutControl的顯示區(qū)域單擊右鍵以顯示彈出菜單,并為頁面布局導航。 (八) 在TOCControl中控制標

39、簽編輯TOCControl默認允許用戶自動地切換圖層的可見性并改變顯示在目錄表中的名稱。你可以增加代碼防止用戶在編輯名稱時輸入空的字符串。1. 在Form_Load事件的開始增加下列代碼。private void Form1_Load(object sender, System.EventArgs e)/ 當縮放時禁止重繪this.SetStyle(ControlStyles.EnableNotifyMessage, true);/ 設置標簽編輯為手動方式axTOCControl1.LabelEdit = esriTOCControlEdit.esriTOCControlManual;/ 后面

40、是加載文檔代碼/ 2. 在設計模式顯示窗體并從屬性窗口選擇AxTOCControl1控件,顯示AxTOCControl事件。雙擊OnEndLabelEdit向代碼窗口添加事件處理函數(shù)。3. 在axTOCControl1_OnEndLabelEdit事件中添加以下代碼:private void axTOCControl1_OnEndLabelEdit(object sender, ESRI.ArcGIS.TOCControl.ITOCControlEvents_OnEndLabelEditEvent e)/ 禁止在編輯標簽時鍵入空字串string newLabel = e.newLabel;if

41、 ( newLabel.Trim() = )e.canEdit = false;4. 生成并生成應用程序。編輯TOCControl控件的地圖、圖層、標題或圖例類的標簽,在其上點擊一次,然后再點一次調用標簽編輯。試著用空字串替代標簽。在編輯期間,你可以隨時使用鍵盤上的ESC鍵取消編輯。(九) 在MapControl上繪制圖形你可以將MapControl作為縮略圖窗體使用,并在其上繪制顯示PageLayoutControl內的焦點地圖的當前范圍。當你瀏覽PageLayoutControl數(shù)據(jù)框架內的數(shù)據(jù)時,你將看到縮略圖窗口也進行了更新。注:使用地圖導航工具導航焦點圖(活動圖)將改變PageLay

42、outControl中焦點地圖的范圍并引起MapControl更新。使用頁面布局工具導航頁面布局將改變頁面布局的范圍(不是PageLayoutControl中的焦點圖的范圍),而MapControl將不更新。1. 向類中增加下列成員變量:public class Form1 : System.Windows.Forms.Formprivate ESRI.ArcGIS.MapControl.AxMapControl axMapControl1;private ESRI.ArcGIS.PageLayoutControl.AxPageLayoutControl axPageLayoutControl

43、1;private ESRI.ArcGIS.TOCControl.AxTOCControl axTOCControl1;private ESRI.ArcGIS.ToolbarControl.AxToolbarControl axToolbarControl1;private IToolbarMenu m_ToolbarMenu = new ToolbarMenuClass(); / 彈出式菜單private IEnvelope m_Envelope;/ MapControl繪制的范圍private Object m_FillSymbol;/ 在MapControl上繪制范圍使用的符號priva

44、te ITransformEvents_VisibleBoundsUpdatedEventHandlervisBoundsUpdatedE;/ PageLayoutControl的焦點圖事件注:聲明的變量visBoundsUpdatedE是一個托管。托管是一個類,它能夠擁有對指定方法的引用,并使它鏈接到一個特定的事件。在事件和方法之間的鏈接過程有時在.NET中被稱作wiring。2. 創(chuàng)建一個叫CreateOverviewSymbol的新函數(shù)。這個函數(shù)是創(chuàng)建你將在MapControl中使用的符號的地方,此符號是用來描述PageLayoutControl焦點地圖數(shù)據(jù)范圍的。函數(shù)中增加的代碼如下:

45、private void CreateOverviewSymbol()/ 獲取IRGBColor接口IRgbColor color = new RgbColor();/ 設置顏色屬性color.RGB = 255;/ 獲取ILine符號接口ILineSymbol outline = new SimpleLineSymbol();/ 設置線符號屬性outline.Width = 1.5;outline.Color = color;/ 獲取IFillSymbol接口ISimpleFillSymbol simpleFillSymbol = new SimpleFillSymbolClass();/

46、設置填充符號屬性simpleFillSymbol.Outline = outline;simpleFillSymbol.Style = esriSimpleFillStyle.esriSFSHollow;m_FillSymbol = simpleFillSymbol;3. 從Form_Load事件在TOCControl標簽編輯代碼之前調用CreateOverviewSymbol函數(shù)。private void Form1_Load(object sender, System.EventArgs e)/ 當縮放時禁止重繪this.SetStyle(ControlStyles.EnableNotif

47、yMessage, true);/ 創(chuàng)建MapControl使用的符號CreateOverviewSymbol();/ 下面是標簽編輯處理代碼/ 4. 增加下列OnVisibleBoundsUpdated函數(shù)。此函數(shù)將與地圖范圍改變時觸發(fā)的事件相連接,并用來設置新的地圖可見邊界范圍框。通過刷新MapControl,你強制它重繪其上顯示的圖形。private void OnVisibleBoundsUpdated(IDisplayTransformation sender, bool sizeChanged)/ 設置新的可見范圍m_Envelope = sender.VisibleBounds;

48、/ 改變MapControl的前景狀態(tài)axMapControl1.ActiveView.PartialRefresh(esriViewDrawPhase,esriViewForeground, null, null);5. PageLayoutControl默認的事件接口是IPageLayoutControlEvents。這些事件不告訴我們數(shù)據(jù)邊框內的地圖范圍。為此你需要使用PageLayoutControl的焦點地圖的ItransformEvents接口。在PageLayoutControl_OnPageLayoutReplaced事件處理中的加載文檔代碼前面增加以下代碼。private v

49、oid axPageLayoutControl1_OnPageLayoutReplaced(object sender, ESRI.ArcGIS.PageLayoutControl.IPageLayoutControlEvents_OnPageLayoutReplacedEvent e)/ 獲取PageLayoutControl中焦點地圖的IActiveView對象IActiveView activeView = (IActiveView) axPageLayoutControl1.ActiveView.FocusMap;/ 捕捉PageLayoutControl的焦點圖的ITransform

50、Events事件visBoundsUpdatedE = new ITransformEvents_VisibleBoundsUpdatedEventHandler(OnVisibleBoundsUpdated);(ITransformEvents_Event)activeView.ScreenDisplay.DisplayTransformation).VisibleBoundsUpdated += visBoundsUpdatedE;/ 獲取焦點圖的范圍m_Envelope = activeView.Extent;/ 后面是加載地圖文檔的代碼/ 6. 在設計模式下顯示窗體并從屬性窗中選擇ax

51、MapControl1,顯示axMapControl事件。雙擊OnAfterDraw向代碼窗口中增加事件處理。7. 向axMapControl1_OnAfterDraw事件處理中增加以下代碼,使用前面創(chuàng)建的符號繪制MapControl顯示邊框。private void axMapControl1_OnAfterDraw(object sender, ESRI.ArcGIS.MapControl.IMapControlEvents2_OnAfterDrawEvent e)if ( m_Envelope = null)return;/ 如果前景狀態(tài)被重繪esriViewDrawPhase view

52、DrawPhase = (esriViewDrawPhase)e.viewDrawPhase;if ( viewDrawPhase = esriViewDrawPhase.esriViewForeground )IGeometry geometry = m_Envelope;axMapControl1.DrawShape(geometry, ref m_FillSymbol);生成并運行應用程序。使用你先前已經(jīng)加好的地圖導航工具改變PageLayoutControl中焦點地圖的范圍。新的范圍被繪制在MapControl上。(十) 創(chuàng)建自定義工具創(chuàng)建協(xié)同MapControl和PageLayout

53、Control一起運作的自定義命令和工具,與你或許已經(jīng)做過的創(chuàng)建ESRI ArcMap應用程序命令非常相似。你將創(chuàng)建一個在PageLayoutControl鼠標點擊位置添加包含當天日期的文本元素的自定義工具。不管用何種方法,創(chuàng)建同MapControl和ToolbarControl協(xié)作的命令與同PageLayoutControl一樣。這個自定義工具的相關代碼與其他本方案源代碼一樣很有用。如果你想要直接使用自定義命令,而不自己創(chuàng)建它,請直接到第24步。1. 從新建項目對話框創(chuàng)建一個新的Visual C# “類庫”項目。2. 將項目命名為“Commands”,并選擇保存位置存貯之。3. 單擊項目菜單并選擇“添加引用(R)”。4. 在添加引用對話框中,復選“ESRI.ArcGIS.Carto”,“ESRI.ArcGI

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論