程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> Visual Basic語言 >> VB綜合教程 >> 用VisualBasic與MS-Draw開發通用作圖軟件

用VisualBasic與MS-Draw開發通用作圖軟件

編輯:VB綜合教程
一、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->

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved