1、API库每个Windows的成份都是一个动态链接库(DLL,Dynamic Link Library),这些动态链接库构成了Win32 API函数。Windows中的主要DLL如下: (1) Windows 内核库(Kernel32.dll) 内核库中的过程用于处理操作系统功能的所有核心工作。例如,多任务管理、内存管理等。此外,内核库还管理系统注册表。 (2) Windows 用户界面管理库(User32.dll) 用户界面管理库包括了Windows管理、菜单、光标、定时器和通信等有关的过程。在Windows中,窗口的标识被称为“句柄”(Handles),简称为“hWnd”,它是一个16位的内
2、存地址。Visual Basic为窗口对象提供了hWnd属性,于是可通过hWnd属性来引用有关窗口。 (3) Windows 图形设备界面库(Gdi32.dll) 图形设备界面库提供了用于管理系统支持的所有图形设备的函数,包括屏幕和打印机等设备的管理。GDI库中的函数为应用程序提供与设备无关的绘图内容,允许在对象间共享图形。在应用程序中通过GDI库中的过程绘图,它不是直接面向硬件操作,而是操作一个“设备描述表”,它通过句柄hDC来跟踪。Visual Basic为图形对象也提供了hDC属性,于是可通过hDC传递给GDI中的过程来执行图形操作。 (4) 多媒体库(Winmm.dll) 多媒体函数可
3、用于播放波形音频、MIDI音乐和数字式影像。用MIC命令字符串和MIC命令消息接口可以完成这些工作。 使用Visual Basic函数和使用Windows API函数之间的唯一差别是,Windows API函数需要先声明后才能使用。从Visual Basic应用程序中访问Windows API函数之前,必须在Visual Basic应用程序中用Declare语句将API函数声明为外部过程。在声明中应该告诉Visual Basic传给DLL的数据类型及从DLL中返回的数据类型。以后便可以像使用任何Visual Basic中的函数和过程一样来使用API函数。使用Declare语句声明外部过程,有如
4、下两种格式:(1) Declare Function 函数名 Lib 库名 (ByVal 参数1 As 类型,.,ByVal 参数k As 类型) As 类型 (2) Declare Sub 子程序名Lib 库名 (ByVal 参数1 As 类型,.,ByVal 参数k As 类型) 如果没有返回值,使用第2种语法。当被声明的过程名与Visual Basic中的过程、变量、常量发生重名或语法冲突时,可在“Lib 库名”短语后插入“Alias 别名”短语。此时,Lib短语中的库名使用其他的名字,而在Alias短语中的别名使用DLL中的真正的名字。10.1.2 在VB中访问查看API函数 在Vis
5、ual Basic中使用API函数之前必须先进行声明。最简单的办法是使用Visual Basic专门提供的预定义Windows API声明等API文本文件。 Win32api.txt文件包含VB中经常使用的许多Windows API的过程声明,多媒体要使用Winmmsys.txt文件。这些文件位于Visual Basic主文件夹下的CommonToolsWinapi子文件夹中。要使用这些文件中的函数、类型等定义时,只需将其从文件中复制到Visual Basic模块中即可。要查看并复制Win32api.txt中的过程,可以使用API文本浏览器应用程序,也可以使用其他的文本编辑器。 单击Visua
6、l Basic程序组中的API文本浏览器,即可启动API函数查看工具,如图2.10.1所示。 图2.10.1 API Viewer窗 在图2.10.1的API函数查看工具的“文件”菜单中选择“加载文本文件”命令,可装入API函数信息的文本文件,选择“加载数据库文件”命令,可装入API函数信息的数据库文件。由于打开数据库文件比打开文本文件快,为提高查看速度,可在装入API的文本文件时将其转换成数据库。 图2.10.2显示了选择“加载文本文件”命令后出现的装入API函数信息的文本文件对话框。文件名框中列出了32位版本使用的Win32api.Txt文件名。 如果选择加载数据库文件命令,出现与图2.1
7、0.2类似的对话框,显示装入API函数信息的数据库文件Win32api.mdb。在加载了包含API函数的信息文件之后打开如图2.10.3所示窗口。图2.10.2 API函数信息的文本文件图2.10.3 API函数查看工具使用 图2.10.3所示的API函数查看工具窗口中的各按钮作用如下: “API类型”下拉列表框可选择要查看的信息类型(声明、常数、类型等),第2个文本框可输入需要查找的API函数名的头几个字母,浏览器将自动定位到需要的条目; 单击“添加”按钮可将找到的条目加入到选定项框中; 单击“删除”按钮可删除“选定项”框中指定的条目; 单击“清除”按钮可将“选定项”框中所有条目删去; 单击
8、“复制”按钮可将“选定项”框中的所有内容复制到剪贴板上。根据需要,将选定的API函数内容复制到剪贴板上,然后,进入Visual Basic工程,在需要加入API信息的模块内指定插入点,再从“编辑”菜单中选择“粘贴”命令。10.1.3 使用API函数例程 例10.1 软件封面制作。 每一个软件在启动时都有一个封面,显示应用程序名、作者及版权信息等。Microsoft Office软件封面的特点是当软件封面在屏幕出现后,后台继续加载主控程序窗体,当主控程序窗体加载完毕,封面自动关闭。软件封面显示过程实质上是使窗口保持在最上层,这是通过调用SetWindowPos接口函数来完成这一任务。本例将介绍此
9、类封面制作过程。 软件封面需要用一个单独的窗体构成,并要将窗体的ControlBox、MaxButton和MinButton属性设置为False,使窗体在运行时不显示控制菜单框及最大、最小化按钮。另外,封面窗体不能有标题栏。要关闭窗体的标题栏,必须将窗体的Caption属性置空(不能含任何字符)。可在封面窗体上放置一个图像框以便装入一幅照片作为背景,放置两到三个标签用以显示软件标题与版权信息等,如果设置标签的BorderStyle属性为0,标签将无边界,将BackStyle属性设置为0,使标签背景为透明,这样不会破坏封面背景图案的完美。本例假定封面窗体为frmCover,封面背景图案、软件标题
10、与版权信息等具体数据请读者自行确定。 主控程序窗体除了所含有的功能控件外,还要一个定时器控件,用于到达预定时间时自动关闭封面窗体。在设计时定时器控件的Enabled属性设置为Fales,Interval属性设置为0。本例假定主窗体为frmMain,定时器为Timer1,如果只是为了演示目的,主窗体上其他控件可以暂时不设置。在加载主控程序窗体的过程中,为保持封面窗体一直处于主窗口的上方,需要通过模块文件(BAS)来引用API的SetWindowPos接口函数,由该函数来完成这一任务。SetWindowPos函数的格式为: Declare Sub SetWindowPos Lib user32(B
11、yVal hWnd As Long, _ ByVal hWndInSertAfter As Long, ByVal x As Long, ByVal y As Long, _ ByVal cx As Long,ByVal cy As Long, ByVal wFlags As Long) As Long 这里,参数hWnd为窗口句柄,它指示一个窗口;hWndInSertAfter指示另一个窗口,由hWnd指示的窗口将被定位在该窗口后;x,y为窗口左上角坐标;cx,cy为窗口的新的长和宽度; wFlags是影响窗口大小、位置和是否显示的16位值。 如果hWndInSertAfter未包含合法窗口
12、句柄,则可用下列值之一: HWND_BOTTOM 窗口将被定位在按AZ顺序排列的窗口底部 HWND_TOP 窗口将被定位在按AZ顺序排列的窗口顶部 HWND_TOPMOST 窗口将被定位在所有窗口顶部 HWND_NOTOPMOST 窗口不能被定位在所有窗口顶部 下面进入工程设计,在窗体的声明节中定义一些常数: Const SWP_NOMOVE = 2 不更新窗口位置 Const SWP_NOSIZE = 1 不更新窗口大小 Const FLAGE = SWP_NOMOVE Or SWP_NOSIZE Const HWND_TOPMOST = -1 窗口放在最上面 当主窗口激活后,可通过Form
13、_Activate事件启动定时器控件Timer1,本例中设置封面窗体延迟时间为2 s。 Sub Form_Activate() Timer1.Interval = 2000 Timer1.Enabled = True End Sub 主窗体的Form_Load事件就是装入封面并使其保持在主窗口的上方。由于程序的读入有一个过程,在这段时间内,可以像Office系列软件一样,把鼠标的形状设置成沙漏形,表示正在读入程序。 Sub Form_Load() Screen.MousePointer = 11 鼠标的形状设置成沙漏形 frmCover.Show 装入封面 frmCover.Refresh S
14、etWindowPos frmCover.hWnd,HWND_TOPMOST,0,0,0,0,FLAGE End Sub 在调用SetWindowPos函数时,形参hWnd对应frmCover.hWnd,指示frmCover窗口;形参hWndInSertAfter选用常数HWND_TOPMOST,使frmCover窗口被定位在所有窗口顶部;形参x,y,cx,cy都取0;选用常数FLAGE不更新frmCover窗口位置和大小。 定时器控件Timer1的Timer事件控制封面的自动关闭,并使鼠标的形状返回正常状态。 Sub Timer1_Timer() Enabled = False Unload
15、 frmover Screen.MousePointer = 0 End Sub 图2.10.4演示了软件封面运行过程。封面窗体关闭了窗体的标题栏、控制菜单框及最大和最小化按钮,上面放置了一个图片和几个标签,并使其保持在主窗口的上方。图2.10.4 软件封面 在任何应用程序中,使用本技术可使某一窗口保持在最上方。 例10.2 Windows系统任务栏的控制。在应用程序中有时需要使用包括任务栏在内的整个屏幕,这时需要把任务栏窗体隐含,程序运行结束后,重新显示任务栏。为了达到这一目的,可使用SetWindowPos函数。API的SetWindowPos接口函数除了可以控制窗口的大小和位置外,还可以
16、控制窗口的显示与隐含。当参数wFlags取值&H80时,隐含窗体;取值&H40时,显示窗体。为了能找到被隐含的窗体,需要调用API的FindWindow函数,其格式如下:FindWindow (ByVal lpClassName As String, ByVal lpWindowName As String) As Long 这里,参数lpClassName 为窗体类名;lpWindowName为窗体名。在模块文件(BAS)输入以下代码:Declare Function FindWindow Lib user32 Alias FindWindowA _(ByVal lpClassName As
17、 String, ByVal lpWindowName As String) As Long Declare Sub SetWindowPos Lib user32(ByVal hWnd As Long, _ ByVal hWndInSertAfter As Long, ByVal x As Long, ByVal y As Long, _ ByVal cx As Long,ByVal cy As Long, ByVal wFlags As Long) As Long Public Const swp_hidewindow = &H80Public Const swp_showwindow =
18、 &H40编制通用过程Formhide通过调用SetWindowPos对任务栏进行控制,当参数hideflag为1时,隐含窗体,否则显示窗体。 Public Sub Formhide(hideflag As Integer)Dim hwnd1 As Longhwnd1 = FindWindow(shell_traywnd, )If hideflag = 1 ThenCall SetWindowPos(hwnd1, 0, 0, 0, 0, 0, swp_hidewindow)ElseCall SetWindowPos(hwnd1, 0, 0, 0, 0, 0, swp_showwindow)En
19、d IfEnd Sub在主窗体上通过两个命令按钮的Click事件调用通用过程Formhide。Private Sub Command1_Click()Formhide (1)End SubPrivate Sub Command2_Click() Formhide (0)End Sub例10.3 生成特殊形状的窗体。通常窗体都是矩形状的,但是可以通过调用API函数使窗体的外观变成椭圆状或带圆角的矩形状窗体。椭圆状窗体需要通过CreateEllipticRgn函数建立,圆角的矩形状窗体需要使用CreateRoundRectRgn函数建立,然后再使用SetWindowRgn函数调用。下面的代码说明了
20、椭圆状外观窗体的建立过程。在BAS模块文件中调用CreateEllipticRgn函数和SetWindowRgn函数:Public Declare Function CreateEllipticRgn Lib gdi32 (ByVal X1 As Long, _ByVal Y1 As Long, ByVal X2 As Long, ByVal Y2 As Long) As Long其中参数(X1,Y1)为椭圆区域在窗体内左上角的坐标,(X2,Y2)为椭圆区域在窗体内右下角的坐标,采用象素数值。Public Declare Function SetWindowRgn Lib user32 (By
21、Val hWnd As Long, _ByVal hRgn As Long, ByVal bRedraw As Boolean) As Long参数hWnd为窗口句柄;hRgn为窗口形状;bRedraw为图形重绘控制。Form_Load()事件为主控程序:Private Sub Form_Load()SetWindowRgn hWnd, CreateEllipticRgn(10, 20, 450, 300), TrueEnd Sub这里,实际参数(10, 20, 450, 300)表示椭圆区域的大小,程序运行效果如图2.10.5所示。可以通过调用CreateRoundRectRgn函数建立带圆
22、角的矩形状窗体,该函数中的第3组坐标参数(X3,Y3)表示圆角弧线的圆心坐标。例10.4 在应用程序中启动或关闭计算机。图2.10.5 椭圆状窗体在应用程序中有时需要启动或关闭计算机系统。API的ExitWindowsEx函数就可方便地实行重新启动计算机或退出Windows系统并关闭计算机。ExitWindowsEx函数有两个参数,通过参数uFlags指示执行该函数时要完成的动作,可以用一个或几个常数的组合来指定动作。这些常数为:EWX_LOGOFF(= 0) 强制终止所有进程,退出登录EWX_SHUTDOWN(= 1) 安全地关闭计算机EWX_REBOOT(= 2) 重新启动计算机EWX_F
23、OREC(= 4) 终止所有进程EWX_POWEROFF(= 8) 关闭计算机,如果计算机支持节电特性,关闭电源 要重新启动计算机需要向ExitWindowsEx函数发送:强制终止所有进程,退出登录、关闭计算机、重新启动计算机等方面的信息,即要设置uFlags的组合值为0+1+2。要关闭计算机系统需要向ExitWindowsEx函数发送:终止所有进程、退出登录、关闭计算机、关闭电源等方面的信息,即要设置uFlags的值为0+1+4+8。ExitWindowsEx函数的dwReserved参数用于控制是否要保留当前窗体状态。假定窗体上的控件如图2.10.6所示。在模块文件中声明ExitWindo
24、wsEx函数:图2.10.6 启动或关闭计算机Declare Function ExitWindowsEx Lib user32 (ByVal uFlags As Long, ByVal dwReserved As Long) As Long在Form的声明节定义ExitWindowsEx函数要使用的常数:Const EWX_LOGOFF = 0 Const EWX_SHUTDOWN = 1Const EWX_REBOOT = 2Const EWX_FOREC = 4Const EWX_POWEROFF = 8ExitWindowsEx函数调用格式如下:Private Sub Command1
25、_Click() If Option1.Value = True Then answer = ExitWindowsEx(13, dwReserved) 关闭计算机 End If If Option2.Value = True Then answer = ExitWindowsEx(3, dwReserved) 重新启动 End IfEnd Sub可参考上述格式在自己的应用程序中调用ExitWindowsEx函数,用于控制Windows系统的自动关闭或重启动。10.2 多媒体应用10.2.1 多媒体基础多媒体是一项正在逐步发展的科技,在人类文化活动中扮演的角色越来越重要。多媒体有效地结合了计算
26、机及传统的视听科技,是一种让用户以交互方式将文本(text)、图像(image)、图形(graphic)、音频(audio)、动画(animation)、视频(video)等多种信息,经过计算机软硬件设备获取、操作、编辑、存储等处理后,以单独或合成的形态表现出来的技术和方法。Windows是支持多媒体的操作环境中的一个系统,它提供了Microsoft MPC的多媒体规格。主宰MPC多媒体外部设备的灵魂是媒体控制接口(MCI,Media Control Interface)命令。MCI提供了许多高级且与设备无关的命令让应用程序直接调用。常用的MCI命令如表2.10.1所示,常见的支持MCI指令的
27、多媒体设备类别代号如表2.10.2所示。表2.10.1 常用的MCI命令命 令 功 能Back单步回倒Close关闭媒体设备Eject弹出媒体Next通过Seek快进到下一个曲目Open打开媒体设备Pause暂停播放或录音Play播放Prev通过Seek快进到当前曲目开始位置或上一个曲目Record录音Save保存到文件Seek查找一个位置Sound用Sound播放声音Step步进Stop停止播放或录音表2.10.2 常见多媒体设备类别设备类别设备名代号数字图像Avivideo动画播放设备AnimationCD Audio设备CdAudio数字动态图像Digitalvideo视频重叠设备Ove
28、rlayMIDI序列发生器Sequencer可程序控制录像机Vcr激光视盘机Videodisc语音播放设备Waveaudio 多媒体的音频格式有CD音频、WAV音频和MIDI。CD音频采用16位、44.1 Hz 的采样频率来记录和播放声音。WAV音频提供了通用的声音系统,用不同强度和振动次数序列来表示,它是一种连续变化的模拟化声音波形信息。其采样频率可从8位的11.025 Hz到16位的44.1 Hz,采样频率越高音质就越好,但文件占用的空间也越大。WAV音频具有极大的灵活性,用户可以对它进行读、写、修改和检索操作。MIDI是音乐设备数字接口(Music Instrument Digital
29、Interface)的简写。它只是一种协议,用于计算机、MIDI键盘和合成器之间的通信。几乎所有的声卡上都有MIDI合成器,通过它就可播放MIDI音乐。MIDI的优点在于它节省存储空间,一段几分钟的乐曲只需几十千字节的存储空间,而以8位11.025 Hz采样频率保存1 s的WAV声音信号需要11 KB的存储空间。 视频是将一幅幅独立图像组成的序列按照一定的速率(一般为25 帧/s或30 帧/s)连续播放,利用视觉暂留现象在人的眼前呈现出连续运动的画面。在Windows中可用的视频文件类型有AVI、MOV、MPG和DAT等。 AVI (Audio Video Interleave)即声音视频交换
30、文件,它包含了一系列的位图和音频数据段,采用Intel公司的Indeo视频有损压缩技术将视频信息与音频信息混合交错地压缩存储在同一文件中。MOV是QuickTime for Windows视频处理软件所选用的视频文件格式。MPG是一种全屏幕运动视频标准文件。DAT是VCD专用的视频文件格式。Windows的视频播放器提供了与硬件无关、纯软件压缩与解压缩的方法,让Windows的用户能在不增加硬件设备的条件下处理视频文件。10.2.2 MMControl控件MMControl控件是Visual Basic 6.0 中进行多媒体程序设计的重要部件。在使用前需要通过“工程”菜单的“部件”项将Micr
31、osoft Multimedia Control 6.0(Mci32.ocx)加载到工具箱内。画在窗体上的MMControl控件如图2.10.7所示。图2.10.7 窗体上的MMControl 控件 其上的多媒体工具按钮的功能与录音机或录像机的功能按钮是一样的,从左到右的9个按钮依次为Prev(倒带)、Next(快进)、Play(播放)、Pause(暂停)、Back(回倒)、Step(步进)、Stop(停止)、Record(录音)和Eject(弹碟)。MMControl控件本质上是一个用户和Windows多媒体系统之间的接口。通过这个接口用户无需介入实际的设备就可操纵所有的多媒体设备。例如,向音频卡、MIDI序列发生器、CD-ROM驱动器、视频CD播放器、视频记录器等设备发出MCI命令。此外,MMControl控件也支持视频文件(avi)的回放。要操纵媒体设备只要通过设定MMControl控件的属性即可。MMControl控件的主要属性如表2.10.3所
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1