龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VB开发 >

用VisualBasic与MS-Draw开发通用作图软件

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
一、OLE技术介绍 OLE和DDE,是支持Windows应用之间相互通讯的一种机制。OLE技术通过"对象"集成windows应用程序,它采用图象、图表、数据库、声音、文本等构成复合对象(也称复合文档)。OLE技
一、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->

精彩图集

赞助商链接