一、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:yzgraphmsdraw.exe,picture
(2)創建MSDRAW.REG:
REGEDIT
HEKY_CLASSES_ROOTMSDraw=MicrosoftDrawing
HKEY_CLASSES_ROOTMSDrawprotocolStdFileEditingserver=c:yzgraphmsdraw.Exe
(3)運行REGEDIT.EXEMSDRAW.REG,屏幕上會出現"c:yzgraphmsdraw.exe"中的信息已成功地登錄在登錄數據庫中"。
(4)從MicrosoftWord5.0中文版中windowsmsappsmsdraw子目錄中拷貝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: est.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->