中科大《MapInfo概論》課件第6講 MapInfo集成地圖開發(fā)_第1頁
中科大《MapInfo概論》課件第6講 MapInfo集成地圖開發(fā)_第2頁
中科大《MapInfo概論》課件第6講 MapInfo集成地圖開發(fā)_第3頁
中科大《MapInfo概論》課件第6講 MapInfo集成地圖開發(fā)_第4頁
中科大《MapInfo概論》課件第6講 MapInfo集成地圖開發(fā)_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

MapInfo概論第一講MapInfo簡介及基本概念第二講MapInfo基本操作—表第三講

MapInfo查詢及分析第四講

空間分析及屬性信息圖形化第五講

OLE嵌入與MapBasic

簡介第六講

MapInfo集成地圖開發(fā)第七講組件式GIS與MapX基礎(chǔ)第八講MapX二次開發(fā)上節(jié)總結(jié):

1、MapBasic的軟件集成環(huán)境:(1)文本編輯器:用于程序的編輯與修改;(2)程序編譯器:用于源程序編譯,生成可執(zhí)行程序;(3)程序鏈接器:將若干獨(dú)立的模塊鏈接成一個(gè)應(yīng)用程序;(4)聯(lián)機(jī)幫助:提供MapBasic每條語句或函數(shù)的詳細(xì)說明資料

mb文件→mbx文件;mb文件→mbo文件+mbp文件→mbx文件

2、創(chuàng)建、編譯和鏈接項(xiàng)目文件(ProjectFile):

[link]-Application-Module

mbp文件+mbo文件-mbx可執(zhí)行文件(實(shí)例)

3、程序組織:Include“mapbasic.def”Type…EndTypeDeclare/DeclarefunctionDefine/GlobalSubMain…EndSubSub…EndSubFunction…EndFunction

4、事件處理程序:單擊鼠標(biāo)或其他由用戶發(fā)出的動(dòng)作稱為事件。事件處理程序:WinClosedHandler、

WinChangedHandler、ToolHandler

、EndHandler

等程序運(yùn)行時(shí),MapBasic自動(dòng)調(diào)用相應(yīng)程序,不需要在主過程中調(diào)用,只在程序開頭聲明即可。

5、對(duì)于定長字符串變量,MapBasic總是用空格去填充不足部分;

6、如果在字符串常量里本身就有雙引號(hào),那么需要插入兩個(gè)連續(xù)的雙引號(hào)到這個(gè)字符串中,例如:

Note“TheTable

““World””isalreadyopen.”

這個(gè)語句的運(yùn)行結(jié)果是顯示下面的一條信息:

TheTable“World”isalreadyopen.

7、值參數(shù)傳遞(ByVal)(1)在Call語句中不必一定要為參數(shù)指定一個(gè)變量名??梢灾付ㄒ粋€(gè)變量名、常量值或其他的表達(dá)式。(2)如果在子過程中賦了一個(gè)新的值給值參數(shù),將不影響調(diào)用者。換句說話,子過程不能通過值參數(shù)把一個(gè)值返回給調(diào)用者。

8、訪問表的指定列:

tablename.columnname;tablename.coln;tablename.col(n)9、創(chuàng)建一個(gè)新表:Createtabletablename

用CreateIndex給一個(gè)表增加索引

CreateIndexonCust(CustID)

用CreateMap使一張表可地圖化

CreateMapForCust

CoordsysEarthy10、修改表結(jié)構(gòu):AlterTable

修改之前應(yīng)該先保存該表:CommitTable

或放棄當(dāng)前編輯:RollbackTable11、順序文件的輸入/輸出:

OpenFilefilenameForInput/Output/AppendAs#1用Input#或Lineinput#語句讀文件,用Write#語句寫數(shù)據(jù)到文件中。12、隨機(jī)文件的輸入/輸出:OpenFile“filename”ForRandomAs#1Len=length用Get和Put語句讀寫數(shù)據(jù)13、二進(jìn)制文件的輸入/輸出:OpenFile“filename”ForBinaryAs#1可以用Get和Put語句讀寫數(shù)據(jù)14、如何查詢、創(chuàng)建、修改地圖對(duì)象:Obj第六講MapInfo集成地圖開發(fā)一、創(chuàng)建用戶界面

1.1菜單(menu)

1.2

工具條(ButtonPads)

1.3對(duì)話框(Dialog)

1.4窗口(Windows)二、MapInfo集成地圖開發(fā)

2.1

集成地圖開發(fā)的概念2.2

MapInfo集成地圖開發(fā)過程2.3回調(diào)(Callbacks)2.4程序運(yùn)行語句一、創(chuàng)建用戶界面

1.1

菜單(menu)菜單欄-MenuBar;菜單-Menu;菜單項(xiàng)-MenuItem①新建菜單:CreateMenu“MenuName”as“SubMenuName”callingSub②新建菜單欄:CreateMenuBarAs

恢復(fù)MapInfo標(biāo)準(zhǔn)菜單欄:CreateMenuBarAsDefault③增加/移除菜單項(xiàng):AlterMenu

add/remove

加分割線“(-”④增加/移除菜單:AlterMenuBarAdd/remove“Menuname”

建立好的菜單需要把它加到菜單欄上才能看得見.AlterMenu“Menuname”Add“Menuname1”As“Menuname1”⑤修改菜單項(xiàng):AlterMenuItem過程Enable/Disable/Check/Uncheck灰化一個(gè)菜單項(xiàng):在菜單項(xiàng)名字的第一個(gè)字母前加“(”快捷鍵的定義:用鍵盤來使用菜單,在想定義的快捷鍵的字母前加字符&熱鍵的定義:執(zhí)行菜單命令的組合鍵·PushButton——觸發(fā)式按鈕。如圖層控制按鈕.特點(diǎn):用戶單擊一個(gè)觸發(fā)式按鈕時(shí),按鈕仍會(huì)彈回來?!oggleButton——開關(guān)式按鈕。如圖例窗口顯示/隱藏按鈕.特點(diǎn):用戶單擊按鈕時(shí),按鈕變成兩種狀態(tài)中的一種,即按下或彈起?!oolButton——工具按鈕,如選擇按鈕.特點(diǎn):用戶單擊按鈕時(shí),一個(gè)工具將處于激活狀態(tài),直到用戶選擇了另一個(gè)按鈕。新建工具條:

CreateButtonPad“名稱”asPushButton/ToggleButton/ToolButton一、創(chuàng)建用戶界面

1.2

工具條(ButtonPads)修改工具條的屬性:AlterButtonPad“主/繪圖”Add/Remove可以重定位、顯示/隱藏工具條或增加刪除工具條中的工具。修改單個(gè)工具的狀態(tài):

AlterButton查詢用戶使用按鈕的信息:Commandinfo()工具條信息:ButtonPadInfo()恢復(fù)標(biāo)準(zhǔn)工具條:CreateButtonPadsAsDefault一、創(chuàng)建用戶界面

1.3

對(duì)話框(Dialog)

1、標(biāo)準(zhǔn)對(duì)話框:(1)詢問對(duì)話框:Ask(prompt,ok_text,cancel_text)DimmoreAsLogicalmore=Ask("Doyouwanttocontinue?","OK","Stop")

(2)顯示信息對(duì)話框:NotemessageNote"Total#ofrecordsprocessed:"+Str$(i_count)

(3)狀態(tài)條:ProgressBarProgressBar"Writingdata..."Callingwrite_outRange600000

(4)FileOpenDlg(path,filename,filetype,prompt)Dims_filenameAsStrings_filename=FileOpenDlg("","","TAB","OpenTable")(5)FileSaveAsDlg(path,filename,filetype,prompt)

2、創(chuàng)建用戶自定義對(duì)話框:

Dialog [Titletitle] [Widthw][Heighth][Positionx,y] [Callinghandler]

Controlcontrol_clause [Controlcontrol_clause...]

MapBasic對(duì)話框控件類型:Control

子句控制

3、修改對(duì)話框:

AlterMapInfoDialogdialog_IDAlterMapInfoDialogdialog_IDDefault一、創(chuàng)建用戶界面

1.4

窗口(Windows)

Map、Browse、Graph、Layout;CreateRedistricter

1、顯示/隱藏窗口:Open/CloseWindowMapBasic、Statistics、Legend、Info、Ruler、Help、Message

2、新建窗口:

MapFrom

統(tǒng)計(jì)窗口:GraphCountry,PopulationFromSelectionLayoutPosition(0,0)Width2Height4

創(chuàng)建重新分區(qū)窗口:

CreateRedistrictersource_tableBydistrict_column

創(chuàng)建圖例窗口:CreateLegend [FromWindowwindow_ID] [{Show|Hide}]

3、窗口ID號(hào):

獲取活動(dòng)窗口所ID號(hào):FrontWindow()

例:Dimmap_win_idAsIntegerOpenTable"states"MapFromstatesmap_win_id=FrontWindow()4、設(shè)置各種不同的窗口:Setbrowse;SetLegend;SetMap;SetWindow;SetPaperUnits;SetLayOut:SetRedistrict5、保存窗口:

SaveWindow;SaveWorkSapce例:SaveWindowi_mapper_IDAs"riskmap.wmf"Type"WMF"6、計(jì)算窗口數(shù)目:

NumWindows()、NumAllWindows()二、MapInfo集成地圖開發(fā)

2.1

集成地圖的概念

1、集成地圖開發(fā)的概念:將MapInfo地圖窗口集成在用其它語言編寫的應(yīng)用程序中的開發(fā)方式,叫做集成地圖開發(fā)。利用其它平臺(tái)能夠調(diào)用MapInfo環(huán)境下的數(shù)據(jù)、圖形等,應(yīng)用程序可以控制集成地圖的外觀、部分執(zhí)行過程,甚至生成完全不同于MapInfo界面的應(yīng)用程序。注意:

MapInfo在后臺(tái)運(yùn)行??梢杂肰isulBasic、VC++、Delphi等可視化的開發(fā)環(huán)境,集成MapInfo窗口到非MapBasic應(yīng)用程序中,特別是原有成熟的應(yīng)用系統(tǒng)中,增加GIS的功能。

集成地圖開發(fā)是在程序中調(diào)用語句(MapBasic語句)來在后臺(tái)啟動(dòng)MapInfo應(yīng)用程序,MapInfo在后臺(tái)運(yùn)行,并不顯示啟動(dòng)窗口。集成地圖窗口與MapInfo中的地圖窗口沒有本質(zhì)的區(qū)別。在集成地圖應(yīng)用程序中,首先構(gòu)造代表MapBasic語句的字符串,然后使用OLE技術(shù)或者DDE技術(shù)(動(dòng)態(tài)數(shù)據(jù)交換)將字符串發(fā)送給MapInfo,從而可以操縱MapInfo,MapInfo會(huì)像處理MapBasic語句一樣處理這些命令字符串。例如:打開地圖窗口,在MapBasic編程中采用MapFrom語句即可。但是,在集成地圖應(yīng)用程序中,必須給出附加的語句(如SetNextdocumentParent),使地圖窗口首先成為當(dāng)前應(yīng)用程序的子窗口。該過程通常稱為“重父化(reparenting)窗口”。然后才可以使用MapFrom語句打開地圖窗口。

二、MapInfo集成地圖開發(fā)

2.2

MapInfo集成地圖開發(fā)過程客戶應(yīng)用程序VB,VC++MapInfo應(yīng)用程序OLE、DDE發(fā)送MapBasic語句MapInfo返回信息—回調(diào)MapBasic程序可選OLE自動(dòng)化,不是OLE嵌入重父化,hWnd一個(gè)簡單的示例程序:

集成地圖的VB編程開發(fā)步驟如下:

1、啟動(dòng)MapInfo

調(diào)用VB的CreateObject()函數(shù),并對(duì)返回的VB對(duì)象變量進(jìn)行賦值,可將該對(duì)象定義為全局變量。如:

DimmiAppasobjectSetmiApp=CreateObject(“mapinfo.application”)

miApp.do“setapplicationwindow”&Form1.hWnd

要調(diào)用已運(yùn)行的MapInfo,則使用GetObject()函數(shù)連結(jié)

Setmapinfo=GetObjec(,“mapinfo.application”)

CreateObject()和GetObject()函數(shù)均使用OLE自動(dòng)對(duì)象連結(jié)MapInfo,DDE技術(shù)在此不做介紹。

2、向MapInfo傳送命令

啟動(dòng)MapInfo后,就可構(gòu)造代表MapBasic語句的字符串。如希望MapInfo執(zhí)行MapBasic的打開表,需構(gòu)造如下字符串:

msg=“opentable”“world.tab”“Interactive”

然后使用Do方法,向MapInfo發(fā)送字符串命令,例如

miApp.do

msg

miApp

為定義的啟動(dòng)MapInfo的全局變量)

可以在一條命令行中合并多個(gè)MapBasic語句,利用&連結(jié)。

msg=“opentable”“usa”“Interactive”

msg=msg&”SetNextDocumentParent”&Form1.hwnd&”Style1”

msg=msg&“Mapfromusa”

Miapp.do

msg注意:關(guān)鍵詞后面的空格是必要的!重父化

因?yàn)榇嬖诳崭瘢?dāng)MapInfo解析命令行時(shí),能自動(dòng)檢測出msg包含3個(gè)獨(dú)立的MapBasic語句:Opentable,SetNextDocument,MapFrom,MapInfo通過保留關(guān)鍵字Open、Set、Map來辨別。

3、從MapInfo中查詢數(shù)據(jù)

如果需要查詢MapBasic表達(dá)式的值,需構(gòu)造代表該表達(dá)式的字符串。例如,如果希望判斷MapBasic的WindowID(0)函數(shù)的返回值,在VB中可以按照如下方式構(gòu)造:

①msg=“WindowID(0)”②采用OLE自動(dòng)化:

DimresultasStringresult=miApp.Eval“WindowID(0)”

解釋:MapInfo將該字符串解釋為MapBasic表達(dá)式,確定該表達(dá)式的值,然后以字符串的形式返回給VB應(yīng)用程序。

注意:MapBasic語句中關(guān)鍵詞后的空格,雙引號(hào)里面的語句最后有一個(gè)空格,如“setapplicationwindow”,否則與VB語句連接時(shí)將出錯(cuò)!

4、定位MapInfo窗口

(1)重定位MapInfo父窗口

啟動(dòng)MapInfo后,采用MapBasic語句的SetApplicationWindow語句可以使客戶程序擁有MapInfo的對(duì)話框和錯(cuò)誤信息對(duì)話框。

Msg=“SetApplicationWindow”&Form1.hWnd

miApp.do

msg(2)重定位文件窗口

需要在VB應(yīng)用程序中集成MapInfo窗口時(shí),需要向MapInfo發(fā)送MapBasic創(chuàng)建窗體的SetNextDocument

語句,以及創(chuàng)建該窗口的MapBasic語句。如:

Msg="SetNextDocumentParent"&Form1.hWnd&"Style1/Style2/Style3"

Mymap.do

msg

Mymap.do"Mapfromworld"

mapid=Val(miApp.eval(“WindowID(0)”))重父化窗口為窗口重新指定一個(gè)父窗口,指定應(yīng)用程序中一控件的句柄,下次當(dāng)創(chuàng)建MapInfo窗口,使用Map、Browse、LayOut或CreateLegend語句時(shí),新建的窗口被重父化好了,這些地圖窗口就將已指定的應(yīng)用程序作為它們的父窗口。即使地圖窗口重新指定了父窗口,MapInfo仍然能夠維護(hù)該窗口,如果部分窗口需要刷新,MapInfo自動(dòng)刷新該窗口,因此客戶應(yīng)用程序可以不考慮擦除和刷新重父化的窗口。

SetNextDocument多個(gè)地圖窗口

(3)重定位圖例和特殊窗口

①特殊窗口

MapInfo包括信息(Info)、標(biāo)尺(Ruler)、消息(Message)和統(tǒng)計(jì)(Statics)窗口等特殊的浮動(dòng)窗口,重父化這些窗口,需要MapBasic的SetWindow語句。如:

miApp.do“SetwindowInfoParent”&form1.hWnd

重父化信息窗口與重父化地圖窗口不同原因:MapInfo可有多個(gè)地圖窗口,但只有一個(gè)信息窗口。

②圖例窗口“SetNextDocument”&地圖窗口.hWnd。再用CreateLegend語句不同于MapInfo的默認(rèn)圖例窗口

自定義的圖例窗口不會(huì)自動(dòng)刷新圖例窗口與地圖窗口或統(tǒng)計(jì)圖窗口綁在一起。

miApp.do“SetWindowInfoParent”&Form1.hWnd

5、允許用戶定義地圖窗口大小

MapInfo不會(huì)依據(jù)新窗口的大小自動(dòng)重新設(shè)置地圖以填滿窗口,因此要實(shí)現(xiàn)改變地圖窗口大小的功能,必須利用WindowsAPI函數(shù)MoveWindow編寫代碼來實(shí)現(xiàn)

DeclareFunctionMoveWindowLib"user32"(ByVal

hwndAsLong,_

ByValxAsLong,ByValyAsLong,_

ByVal

nWidthAsLong,ByVal

nHeightAsLong,_

ByVal

bRepaintAsLong)AsLongPrivateSubForm_Resize()dimmHwndaslong

mHwnd=Val(miApp.Eval(“WindowInfo(FrontWindow(),WIN_INFO_WND)”))MoveWindow(mHwnd,0,0,ScaleWidth,ScaleHeight,0)EndSub

FrontWindow():返回當(dāng)前活動(dòng)窗口的整型ID號(hào).

WindowInfo(要返回的信息的窗口的整型ID號(hào))Scalemode屬性設(shè)置為Pixels(象素)由示例程序演示(API函數(shù)瀏覽器)

6、集成MapInfo工具按鈕在VB應(yīng)用程序中可集成MapInfo中所有工具按鈕的功能,如放大、縮小等,但是由于不能對(duì)MapInfo的工具欄進(jìn)行重父化,因此如果在應(yīng)用程序中需要工具按鈕,只能在應(yīng)用程序開發(fā)環(huán)境中自己創(chuàng)建。如果希望所創(chuàng)建的VB工具欄按鈕能仿效標(biāo)準(zhǔn)的MapInfo按鈕,可以使用MapInfo的RunMenuCommand方法??稍O(shè)置信息提示如下:

miApp.RunMenuCommand1707/M_TOOLS_PNT_QUERY

既可以使用數(shù)字,也可使用標(biāo)識(shí)符,若使用標(biāo)識(shí)符,必須在程序中包含MapBasic頭文件,如果開發(fā)環(huán)境是:

VB——MapBasic.bas;VC++(C++Builder)——MapBasic.h;

MapBasic——MapBasic.def

Main工具條:選擇:M_TOOLS_SELECTOR=1701

矩形選擇:M_TOOLS_SEARCH_RECT=1722

圓選擇:M_TOOLS_SEARCH_RADIUS=1703

多邊形選擇:M_TOOLS_SEARCH_BOUNDARY=1704

放大:M_TOOLS_EXPAND=1705

縮?。篗_TOOLS_SHRINK=1706

平移:M_TOOLS_RECENTER=1702

信息查詢:M_TOOLS_PNT_QUERY=1707

標(biāo)注:M_TOOLS_LABELER=1708

拖放窗口:M_TOOLS_DRAGWINDOW=1734

標(biāo)尺:M_TOOLS_RULER=1710

Draw工具條:點(diǎn)符號(hào):M_TOOLS_POINT=1711

直線:M_TOOLS_LINE=1712

折線:M_TOOLS_POLYLINE=1713

弧:M_TOOLS_ARC=1716

多邊形:M_TOOLS_POLYGON=1714

橢圓:M_TOOLS_ELLIPSE=1715

矩形:M_TOOLS_RECTANGLE=1717

圓角矩形:M_TOOLS_ROUNDEDRECT=1718

文本:M_TOOLS_TEXT=1709

框架:M_TOOLS_FRAME=1719

增加節(jié)點(diǎn):M_TOOLS_ADD_NODE=1723

7、子定義MapInfo快捷菜單可以使用MapBasic語句增加/刪除快捷菜單中的一個(gè)或多個(gè)命令。

AlterMenu…AddCallingOLE增加

AlterMenu…Remove刪除

可使用CreateMenu語句重新定義菜單,并使用“(-”代碼作為新菜單定義。如刪除MapInfo地圖窗口中的快捷菜單:

miApp.do

"CreateMenu""MapperShortcut""ID17as""(-"""

8、打印MapInfo集成窗口

應(yīng)用MapBasic的“PrintWin”語句可以打印MapInfo窗口。

MiApp.do“PrintWin”

也可先利用MapBasic的“SaveWindow”語句輸出一個(gè)窗口圖元文件(WMF)來替代地圖的打印,然后應(yīng)用VB的“PrintForm”9、錯(cuò)誤捕獲

VB:OnErrorGoToVC++:try….catch….finally

10、終止MapInfo的運(yùn)行

通過CreateObject()創(chuàng)建MapInfo應(yīng)用程序?qū)ο?,如果釋放該?duì)象變量,則終止MapInfo的運(yùn)行。所以miApp應(yīng)該作為全局變量,如果是局部變量的話,子程序結(jié)束時(shí),miApp就會(huì)釋放,MapInfo終止運(yùn)行。

SetmiApp=Nothing二、MapInfo集成地圖開發(fā)

2.3

回調(diào)(Callbacks)

1、回調(diào)概述

前面介紹了如何向MapInfo發(fā)送命令,我們還希望MapInfo能把信息發(fā)送到應(yīng)用程序中。如當(dāng)?shù)貓D窗口改變時(shí),希望MapInfo能通知應(yīng)用程序,并告知改變的窗口ID,程序員可在應(yīng)用程序中編寫相應(yīng)的響應(yīng)代碼。這種獲得MapInfo發(fā)送回來的消息的通訊機(jī)制稱作回調(diào)。下面幾種情況下,允許MapInfo向客戶應(yīng)用程序發(fā)送信息:

(1)用戶使用自定義工具與MapInfo窗口進(jìn)行交互。如用戶在地圖窗口中單擊并拖動(dòng)鼠標(biāo)繪制一條直線,MapInfo可以告訴客戶程序用戶選擇的x,y坐標(biāo);(2)用戶選擇了菜單命令。假如應(yīng)用程序自定義了MapInfo的快捷菜單,當(dāng)用戶從快捷菜單中選擇了命令時(shí),MapInfo可以通知客戶程序來調(diào)用該菜單事件;(3)當(dāng)?shù)貓D窗口發(fā)生改變時(shí)。如果用戶選擇了地圖窗口中的內(nèi)容,(如增加或刪除了圖層,或漫游地圖),MapInfo可以告訴客戶程序該窗口的ID號(hào),與MapBasic的特殊處理進(jìn)程winChangedHandler類似;(4)當(dāng)MapInfo狀態(tài)欄中的文本發(fā)生改變時(shí)。MapInfo的狀態(tài)欄不會(huì)顯示在集成地圖窗口中,如果希望模擬MapInfo的效果,必須編寫代碼。無論狀態(tài)欄文本發(fā)生何種變化,MapInfo都能通知應(yīng)用程序。利用OLE自動(dòng)服務(wù)器功能完成回調(diào)。

2、如何使用OLE回調(diào)(1)采用VB4.0以上版本或其它能支持OLE服務(wù)器的語言,創(chuàng)建一個(gè)能定義一個(gè)或多個(gè)OLE方法的類;(2)如果模擬MapInfo的狀態(tài)欄,創(chuàng)建SetStatusText方法,對(duì)該方法進(jìn)行定義使其能獲取一個(gè)字符串變量;(3)如果希望在每次地圖窗口改變時(shí)MapInfo能通知客戶程序,創(chuàng)建WindowContentsChanged方法,定義該方法能獲取一個(gè)4字節(jié)整數(shù)大小的變量,代表該MapInfo窗口的ID號(hào);(4)如果使用自定義菜單命令或按鈕,希望MapInfo能通知客戶程序,可以創(chuàng)建一個(gè)或多個(gè)額外的方法,所定義的每一個(gè)方法能獲取一個(gè)字符串變量;(5)用自定義的類來創(chuàng)建對(duì)象:

PublicmyCallbackAsNewCMyClass(6)在程序啟動(dòng)MapInfo后,調(diào)用MapInfo的SetCallback方法,然后指定該對(duì)象名:

mapinfo.SetCallback

myCallback(7)如果希望當(dāng)用戶在使用自定義工具欄按鈕時(shí),MapInfo向客戶程序發(fā)出通知,可以自定義按鈕,如:

AlterButtonPad…AddCallingOLE

(8)如果希望當(dāng)用戶使用菜單命令時(shí),MapInfo向客戶程序發(fā)出通知,可以使用諸如“AlterMenu…AddCallingOLE”的語句來自定義菜單命令;(9)在所定義的方法內(nèi),編制必要的處理程序來處理MapInfo傳送來的變量。

3、處理回調(diào)數(shù)據(jù)

在集成地圖應(yīng)用程序中,創(chuàng)建自定義的MapInfo菜單命令和工具按鈕后,使用回調(diào)機(jī)制來處理MapInfo發(fā)送給應(yīng)用程序的數(shù)據(jù)。當(dāng)用戶選擇這些命令和按鈕后,MapInfo向OLE方法發(fā)送一個(gè)由逗號(hào)分隔的包含8個(gè)元素的字符串。例如:

MI:-73.5548,42.122,F(xiàn),F(xiàn),-72.867702,43.025,202,

如果熟悉MapBasic的CommandInfo()函數(shù),那么很容易明白該逗號(hào)分隔的字符串的內(nèi)容。編寫MBX應(yīng)用程序時(shí)是通過調(diào)用MapBasic處理程序的子過程句柄,來實(shí)現(xiàn)自定義菜單命令和自定義按鈕的。在子過程句柄中,通過調(diào)用CommandInfo()函數(shù)來判斷當(dāng)前事件的不同信息。如判定在MapBasic編程中使用自定義繪制工具按鈕時(shí)是否按

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論