Visual Basic for Windowss3.0(简称VB)是目前开发WINDOWS应用软件的最有效工具之一,它综合运用了BAIC语言和新的可视化设计工具,不仅功能强大,而且简单易学。其次,VB具有事件驱动的编程机制,它充分利用WINDOWS图形环境的特点,能让开发人员快速地构造强大的应用程序。
那么在开发VB应用软件时,如何充分地扩充VB的功能呢?这就要求在不同的层次上要很好地利用VB最具威力和特色的部分:
●在函数层调用动态链接库。
●在控件层使用VBX。●在应用层执行其他应用程序。
一、在函数层调用功能态链接库(DLL)
WINDOWS操作系统实际上是由许多功能强大的动态链接库(DLL)组合而成。VB考虑到有些工作超过自身语言所及的能力范围,所以提供了直接调用操作系统中这些DLL子程序的能力。例如:在正常情况下,窗口的控制菜单提供了七种功能:还原、移动、大小、最小化、最大化、关闭和切换。而在实际应用中,我们希望窗口按设计时的大小显示,不允许用户随意改变窗口大小,也不允许切换到其他窗口,这就要求在设计时必须删除控制菜单中除“移动”和“关闭”选项以外的所有控制菜单项。要完成这一任务,我们首先可把窗体的MaxButton属性和MinButton属性设置为False,不允许窗体最小化和最大化,窗体也就不能还原。然后再把窗体的BorderSstyle属性设置为1-Fixed Single或3-Fixed Double,不允许窗体改变大小。但VB本身却无法删除“切换”选项和两条分隔线。幸运的是,通过调用WINDOWS DLL就很容易做到。
通常,要使用WINDOWS DLL,首先必须说明要使用的DLL子程序,我们可在两个地方说明所使用的DLL子程序,即在全局模块中说明,或者在窗体层的说明部分中说明。其格式是:
Declare Sub子程序名Lib“库名”[Alias“别名”][([参数])]
Declare Function子程序名Lib“库名”[Aliass“别名”][([参数])][AS数据类型]
第一种格式表示过程没有返回值,第二种格式表示过程返回一个值,该值可用于表达式中,库名如果用的是WINDOWS操作环境(在System目录下)中的库,如“USER.EXE”,“KERNEL.EXE”或者“GDI.EXE”等,就用此名作为库名。如果用的是其他来源的DLL,则用包括路径的文件名称(如:“C:\WINDOWS\BRUSH.DLL”)。别名(Alias)是允许另外使用别的名称来称呼子程序,尤其是当外来子程序名与VB保留字相同时,它就显得特别有用,参数指要被传递到子程序的参数值,数据类型指的是函数返回值的数据类型,它可能是Integer,Long,Single,Double,Currency或String。下面就是所要使用的DLL子程序的说明:
Declare Function GetSystemMenu% Lib"User"(ByValhWnd%,ByValbRevert%)
Declare \function \RemoveMenu% Lib"User"(ByValhMenu%,ByValnPosition%,ByValwFlags%)
当说明完DLL子程序后,执行DLL子程序的方法,就象在VB中执行通用过程(函数)一样。下面我们编写一个名为Remove-Items-From-System的过程来完成上面例子中提到的功能,过程中调用了上述说明过的两个DLL子程序:
Sub remove-Items-From-Sysmenu(A-Form As Form)
'获取窗体系统菜单句炳
HSysMenu=GetSystemMenu(A-Form.hWnd,0)
'删除除“移动”和“关闭”外的所有菜单项, 删除时必须从最后一个菜单项开始
R=RemoveMenu(HSysMenu,8,MF-BYPOSITION) '删除切换
R=RemoveMenu(HSysMenu,7,MF-BYPOSITION) '删除第一条分隔线
R=RemoveMenu(HSysMenu,5,MF-BYPOSITION) '删除第二条分隔线
End Sub
有了这个过程,在任一窗体的Form-Load事件中加入下面一行代码就可以删除该窗体除“移动”和“关闭”选项以外的所有控制菜单项:
Remove-Items-From-Sysmenu Me
二、在控件层使用VBX
VB功能强大的第二个部分是VBX的使用,即其开放及无限扩增的特性。虽然VB工具箱(ToolBox)已经尽量将设计应用软件所需的工具包括在内,但是,为了不断扩充VB的功能,VB提供了一套开发工具(Custom Control Development Kit)供第三方开发者来设计所需要的控件。当设计完控件文件后(其文件扩展名为“.VBX”)可以从菜单“file”项下选“Add File...”命令,结果画面上出现一个"Add File"对话框,双击所需的VBX文件名即可将该VBX加入到VB中,这些控件装入VB后,VB会将这些外来控件加到原有工具箱中,与其他控件一起合并使用。正是因为有了这一技术,VB才能够不断发展,使用VB编程也更为方便、迅速和有效,这是VB区别于其他程序开发环境的主要特色之一。自从VB推出以来,第三方软件公司设计了大量的新控件,下面是开发WINDOWS应用程序时几个非常有用的VBX:
●三维控件Threed.vbx
它提供了包括命令按钮、复选框、单选钮 、框架、下推按钮和面板在内的六种三维控件,使用这些控件可使窗体更具有立体感。
●图形控件Graph.vbx
向图形控件发送数据后,图形控件可绘制二维或三维饼图,、直方图、趋势图,并且可以打印或拷贝到剪贴板上。
●通讯控件Mscomm.vbx
它提供了串行通讯的能力,可用于串行端口之间传送和接收数据。
●数据网格控件Truegrid.vbx
它既可以作为一般的数据显示表格,也可把一个数据库和一个网格联系起来,它是制作数据库浏览器或数据显示的理想工具。
二、在应用层执行其他应用程序
在编制复杂的大型软件时,我们经常会需要有一些功能相对独立和完善的专用程序,如编辑程序,而这些程序通常是通用和流行并经实践检验的。如果由开发者重新编制这些程序,不仅大大增加了程序工作量以及调试过程,而且功能上很难比得上这些通用程序。显然,如果我们能直接调用这些程序是最为理想的。令人欣喜的是,VB提供了一个可用来调用其他应用程序的Shell函数,使VB的某些功能可直接由其他应用程序来完成,从而大大地减少了编程任务。
格式是Shell(命令字符串[,窗口类型])
其中的命令字符串是欲执行的应用程序名,可执行文件的扩展名只限于“.COM”,“.EXE”,“.BAT”,“.PIF”,缺省扩展名为.EXE文件,窗口类型是一整数值,它对应于程序执行时的显示窗口风格,是可选 的,共有下列5种选择:
窗口类型值
窗口类型 1,5,9
正常窗口,具有指针 2
最小窗口,具有指针(缺省) 3
最大窗口,具有指针 4,8
正常窗口,不具指针 6,7
最小窗口,不具指针
当Shell函数成功地调用某一个应用程序时,返回一个任务标识(Task ID),该ID表示正在执行的程序的唯一标识。
[例]
X=Shell("C:\WINDOWS/NOTEPAD.EXE",1)
该语句调用WINDOWS附件中的记事本NOTEPAD.EXE作为编辑程序来使用,并返回1个ID值到X。