一、OLE技術介紹
OLE和DDE,是支援Windows應用之間相互通訊的機制。 OLE技術透過"物件"整合windows應用程式,它採用圖象、圖表、資料庫、聲音、文字等構成複合物件(也稱複合文件)。 OLE技術是在複合文件中實現連結物件或嵌入物件的一組協定,該技術首先由Aldus公司在1988年提出,後被Microsoft公司引進到Windows中。使用OLE,一個應用程式可以和其他應用程式合作,以產生包含有不同種類物件的複合文件,並且文件中所包含的物件易於被使用者操作。
支援OLE呼叫的Windows軟體,在Windows中會有註冊登記資訊,查看WIN.INI中[embedding]節的內容,可知道Windows中包含哪些可以呼叫的OLE物件。畫筆(PBRUSH.EXE)、統計圖(MicrosoftGraph)、物件包裝程式(PACKGER.EXE)和錄音機(SOUNDREC.EXE)是Windows環境下常用的OLE嵌
入對象。
Windows環境下的大部分開發工具(如C、C 、PASCAL、VisualBasic3.0、CA-Realizer、FoxPRoforWindows、VisualFoxProforWindows等)大都支援開發具有呼叫OLE物件能力的應用程式,相較之下,VisualBasic3.0開發OLE呼叫程式更容易。
Windows環境下採用OLE技術開發應用程式有許多優點:
(1)、提高軟體開發效率:透過OLE的嵌入其它WINDOWS應用程式,應用程式設計師所進行的軟體開發工作實際上變成了軟體整合(或稱"軟體組合"),這樣就比逐個開發軟體功能模組要快得多,應用軟體的開發週期大大縮短;
(2)、性能穩定、可靠:由於OLE嵌入對象程式都是經過嚴格測試過的商品軟體,因此,經過"組合"的軟體,只要經過對"組合過程"部分進行嚴格測試(測試的工作量相對來說較小),就能成為效能穩定可靠的高品質軟體;
(3)、功能完善:OLE嵌入其它WINDOWS應用程式,不僅"嵌入"了其它應用程式的資料,同時也"嵌入"了其它應用程式的功能。應用軟體中能夠"嵌入"所有的WINDOWSOLE嵌入物件,例如,你透過Word,Excel,Mail,MicrosoftGraph等建立起一個包含文字處理、電子報表、電子郵件和統計圖形的綜合性辦公室自動化系統軟體;
(4)、開發人員不再需要是程式專家:VisualBasic3.0中提供了OLE2.0呼叫功能,大大降低了OLE呼叫的難度,一般的軟體開發人員即可開發出呼叫WindowsOLE物件的應用程式。
VisualBasicforWindows3.0(以下簡稱VB)是一個面向Windows的高階開發系統,它採用事件驅動機制、視覺化介面設計及整合的開發、偵錯、編譯環境,VB同時也提供DDE、OLE程式開發功能。 VB既適合於初級程式設計師,又適合於高級程式設計師編寫功能強大的應用軟體。
二、通用作圖系統的設計
1、在Windows中加入MicrosoftDrawOLE工具:
(1)修改win.ini:
[embedding]
MSDraw=MicrosoftDrawing,MicrosoftDrawing,c:/yzgraph/msdraw.exe,picture
(2)建立MSDRAW.REG:
REGEDIT
HEKY_CLASSES_ROOT/MSDraw=MicrosoftDrawing
HKEY_CLASSES_ROOT/MSDraw/protocol/StdFileEditing/server=c:/yzgraph/msdraw.Exe
(3)執行REGEDIT.EXEMSDRAW.REG,螢幕上會出現"c:/yzgraph/msdraw.exe"中的資訊已成功登入登入資料庫"。
(4)從MicrosoftWord5.0中文版/windows/msapps/msdraw子目錄拷貝MSDRAW.EXE、MS-DRAW.HLP至c:/yzgraph子目錄下。
2.在VB中建立一個FORM1:啟動VisualBASIC3.0,選File-NEWProject選單;
3.在FORM1上建立"存檔""列印""退出"三個按鈕物件;
4.在FORM1上建立一個OLE2物件:在Toolbox視窗選OLE2.0控制項,移動滑鼠至Forml視窗上,按下左滑鼠同時移動滑鼠遊標拖出一個小小的長方形。放開左滑鼠,這時,螢幕上會出現"insertobject"對話視窗,選擇CreateNew-MicrosoftDrawing-ok,這時MicrosoftDrawing就會啟動,退出MicrosoftDrawing;
5.在VisualBasic3.0中增加一個圖形記憶體及列印控制項(mhoutbx.vbx):
mhoutbx.vbx是MicroHelp公司提供的具有圖形顯示器列印功能的通用VBX控制。在VisualBasic3.0中選File-AddFile選單,選取mhoutbx.bx;
AutoSize=-1'True
EraseForRead=-1'True
6.在FORM1上建立一個圖形記憶體及列印的mhoutbx物件(用於MicrosoftDraw的
結果光碟、列印輸出);
7.使FORM1永遠處於"最上層"(即不被其它視窗覆蓋):
Global.bas:
GlobalConstSWP_MOVE=2
GlobalConstSWP_NOSIZE=1
GlobalConstFLAGS=SWP_MOVEOrSWP_NOSIZE
GlobalConstHWND_TOPMOST=-1
GlobalConstHWND_NOTOPMOST=-2
DeclareFunctionSetWindowsPosLib"user"(ByValh,ByValhb,ByValX,
ByValy,ByValcx,ByValcy,By-Valf)AsInteger
DeclareFunctionGetSystemMetricsLib"user"(ByValnIn-dex)
GlobalConst
NILL=0&
GlobalConstWM_SYSCOMMAND=&H112
GlobalConstWM_LBUTTONDBLCLK=&H203
GlobalConstSC_CLOSE=&HF06O
GlobalConstWM-CLOSE=&H10
GlobalConstWM_GETMINMAXINFO=&H24
DeclareFunctionFindWindowsLib"User"(ByVallpClassNameAsAny,
ByVallpWindowsNameAsAny)
AsInteger
DeclareFunctionsendmessage&Lib"user"(ByValhWnd,ByValwmsg,
ByValwparam,ByValiparamAsLong)
GlobalConstSW_SHOWMAXIMIZED=3
DeclareFunctionShowWindowsLib"User"(ByValhWndAsInteger,
ByValnCmdShowAsInteger)AsInteger
8、啟動MSDraw,並使其最大化:
SubForm_Load()
Dimrc,msdraw_h,Ipclass$,lpcaption$
form1,Width=Pane13D1.Width
rc=SetWindowPos(form1.hWnd,HWND
_TOPMOST,0,0,0,0,Flags)
rc=sendmessage(form1,OLE1.hWnd,WM
_LBUTTONDBLCLK,0,NILL)
AppActivate"MicrosoftDraw-繪圖"
SendKeys"F",True
SendKeys"{LEFT}X",True
form1.Show
EndSub
9、圖形存檔:
SubPanel3D1_Click()
a$="c:/test.wmf"
AppActivate"MicrosoftDraw-繪圖"
SendKeys"FU",True
FORM1.MhOutbox1.MetaFileName=a$
FORM1.MhOutbox1.SaveMetaFile=True
EndSub
10、圖形列印:
SubPanel3D2_Click()
AppActivate"MicrosoftDraw-繪圖"
SendKeys"FU",True
MhOutboxl.OutContext=1
MhOutbox.EndPage=True
EndSub
11、退出:
SubPanel3D3_Click()
Unloadform1
End
EndSub->