您现在的位置:首页 >> 网络教学 >> 多媒体程序设计 >> 内容

调用多媒体API函数

时间:2009-6-19 10:39:59 点击:2864

一、 API函数简介

(一)什么是API?

APIApplication Programming Interface)指应用程序编程接口,是一套用来控制Windows的各个部件(从桌面的外观到为一个新进程分配的内存)的外观和行为的一套预先定义的Windows函数.用户的每个动作都会引发一个或几个函数的运行以Windows告诉发生了什么。VB在这方面作了很多工作.它完全隐藏了API并且提供了在Windows环境下编程的一种完全不同的方法。

你用VB写出的每行代码都会被VB转换为API函数传递给Windows.例如:Form1.Print...VB 将会以一定的参数(你的代码中提供的,或是默认参数)调用TextOut 这个API函数.

同样,当你点击窗体上的一个按钮时,Windows会发送一个消息给窗体(这对于你来说是隐藏的),VB获取这个调用并经过分析后生成一个特定事件(Button_Click).

API函数包含在Windows系统目录下的动态连接库文件中(User32.dll,GDI32.dll,Shell32.dll...)

(二)API函数的声明

VB中声明API函数有两种方法:

如果我们只在某个窗体中使用API函数,我们可以在窗体代码的General部分声明它:

  声明的语法是:

  Private Declare Function ...

  Private Declare Sub.....

  这里必须采用Private声明,因为这个API函数只能被一个窗体内的程序所调用。

  如果我们的程序有多个窗体构成,而且我们需要在多个窗体中使用同一个API函数,就需要在模块中声明了。

先添加一个模块(如图12-9示),                           

12-17 添加模块

  然后采用如下语法声明:

  Public Declare Function....

  Public Declare Sub....

  Public声明的含义是把API函数作为一个公共函数或过程,在一个工程中的任何位置(包括所有的窗体和模块)都能直接调用它。声明完毕我们就能在程序中使用此API函数了。

(三)API函数的调用

  二、可采用以下几种方式使用API函数,以SetWindowPos函数为例:

1)忽略函数返回值的调用

SetWindowPos Form1.hWnd, -2 ,0 ,0 ,0, 0, 3

  注意此时函数的参数是不加括号的。

2Call方法调用

Call SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)

  注意这里需要加上括号,但我们不取回函数的返回值。

3)取得函数返回值的调用

MyLng = SetWindowPos(Form1.hWnd, -2, 0, 0, 0, 3)

  此时需要加上括号,而且我们必须事先定义一个变量(变量的类型与函数返回值类型相同)来存储API函数的返回值。

(四)使用API Text Viewer

Visual Basic自己带的API Text Viewer可以让你寻找Windows API函数,你还可以拷贝所需常数、函数声明语句或结构定义。在开始菜单的Visual Basic 6.0组里有API Text Viewer的菜单项,你可以选择它来打开API Text Viewer

      使用API Text Viewer请遵循以下步骤:

1.        打开API Text Viewer

2.           File菜单选择Load Text File,出现Select a Text API File对话框;

3.           单击下列文件之一:WIN32API.TXT(32Windows API函数清单)WINMMSTS.TXT     (多媒体Windows API函数清单)

4.           单击Open按钮(可能会出现对话框,问你是否想要将文本文件转换为数据库),API函数清单出现在Available Items列表框;

5.           单击API列表框,选择下列项目之一: Constants(常数声明)、Declares(函数声明)、Types(结构定义);

6.           单击你想在程序中使用的项,然后单击Add按钮,你想选择的项就出现在Selected Items列表框中;

7.           对你想在程序中加入的每个常数、函数声明或结构定义重复56步;

8.           单击Copy按钮;

9.           切换回Visual Basic,将复制项粘贴到代码窗口的声明区;

10.       最后退出API Text Viewer

当然你可以不必使用API Text Viewer,但是API Text Viewer可以确保你没有拼写错误。但是不要轻信API Text ViewerVisual Basic提供的API声明始终没有做到完全正确(至少上一个版本的Visual Basic就没有提供完全正确的API声明),所以如果调用API不成功的话,可能是API声明有误的原因,请查阅Windows SDK来寻找正确的API定义。这种Bug令使用Visual Basic的程序员十分伤心,所以作为编程者,一定要编制稳定可靠的程序才能让你的用户满意。

二、多媒体API函数调用实例

【例12.6利用mciEexecute()函数制作CD播放器

mciEexecute()函数只有一个字符类型的形参,用于给MCI发送指令字符串,使用非常方便;mciSendCommand()函数在传递字符串命令的同时,还可以在参数中获得命令的执行结果;mciGetErrorString()函数用于获得上一个MCI命令的错误信息和错误代码。

下面是使mciEexecute()函数的常用控制命令。

mciEexecute Open Cdudio Alias cd  打开媒体设备

mciEexecute  “Play cd”              播放别名为cd设备上的音乐

mciEexecute  “Stop cd”              停止播放

mciEexecute  “Seek cd To end”       移动到结束位置

mciEexecute  “Set cd Audio Left on” ‘打开左声道

mciEexecute  “Set cd Door open”     弹出光碟

mciEexecute  “Close cd”             关闭媒体设备

其中“cd”是为多媒体设备定义的别名,所有小写的单词可以进行适当的改变以完成不同的命令。

界面设计。添加窗体Form3,添加一个标准模块,命名为CDModule,在标准模块中添加函数mciEexecute()的声明。在窗体上添加一ToolBar控件ToolBar1,并在其上添加6个按钮,标题依次为“打开”、“播放”、“暂停”、“倒带”、“弹碟”和“关闭”,Key值依次为TOpenTPauseTBackTopenDoorTClose

代码编写如下:

Private Sub Form_load()

ToolBar1.Button(1).Enabled = True

ToolBar1.Button(2).Enabled = False

ToolBar1.Button(3).Enabled = False

ToolBar1.Button(4).Enabled = False

ToolBar1.Button(5).Enabled = False

ToolBar1.Button(6).Enabled = True

End Sub

Private Sub ToolBar1_ButtonClick(ByVal Button As MSComctlLib.Button)

  Select Case Button.Key

      Case “TOpen”                            单击“打开”按钮

        mciEexecute “Open Cdaudio Alias cd”  打开媒体设备

ToolBar1.Button(1).Enabled = False

ToolBar1.Button(2).Enabled = True

ToolBar1.Button(3).Enabled = False

ToolBar1.Button(4).Enabled = False

ToolBar1.Button(5).Enabled = False

        PlayCD                         调用PlayCD过程开始播放

      Case “TPlay”                         单击“播放”按钮

        PlayCD                            PlayCD过程开始播放

      Case “TPause”                           单击“暂停”按钮

        mciEexecute “Stop CD”               暂停播放

ToolBar1.Button(2).Enabled = True

ToolBar1.Button(3).Enabled = False

ToolBar1.Button(4).Enabled = True

ToolBar1.Button(5).Enabled = True

      Case “TBack”                            单击“倒带”按钮

        mciEexecute “Seek cd To Start”      移动到起始位置

ToolBar1.Button(1).Enabled = False

ToolBar1.Button(2).Enabled = True

ToolBar1.Button(3).Enabled = False

ToolBar1.Button(4).Enabled = False

ToolBar1.Button(5).Enabled = True

      Case “TOpenDoor”                        单击“弹碟”按钮

                            该按钮在“弹碟”和“装碟”之间转化

      If ToolBar1.Button(5).Caption = “弹碟” Then

          mciEexecute “Set cd Door open”          

  ToolBar1.Button(5).Caption = “装碟

      Else

          mciEexecute “Set cd Door Close”          

  ToolBar1.Button(5).Caption = “弹碟

      End If

      Case “TClose”                            单击“关闭”按钮

          mciEexecute “Close cd”             关闭媒体设备

End Sub

Sub PlayCD()

mciEexecute “Play cd”                    开始播放

ToolBar1.Button(2).Enabled = False

ToolBar1.Button(3).Enabled = True

ToolBar1.Button(4).Enabled = False

ToolBar1.Button(5).Enabled = True

End Sub

下图为程序运行界面。程序运行时单击“打开”按钮,打开媒体设备,放入CD唱片后自动开始播放。

【例12.7控制PC喇叭:使用VB中的Beep语句只能发出一种声音。可以使用API函数,发出不同声音。

【编程思路】VB程序中背景音乐的制作就是调用API函数。

【设计步骤】1.新建一个标准工程,创建一个新窗体,默认名为Form1

            2.Form1上添加一个CommandButton控件和一个TextBox控件。

            3.源程序 

Option Explicit

'API函数声明

Private Declare Function APIBeep Lib "kernel32" Alias "Beep" _

        (ByVal dwFreq As Long, _

        ByVal dwDuration As Long) As Long 'PC发出声音

'Text1中输入不同的数据会发出不同的声音

Private Sub Command1_Click()

        Dim i As Long

        i = CLng(Text1.Text)                            

        APIBeep i, 500

End Sub

12-18 控制PC喇叭运行界面

【例12.8API函数实现满屏播放AVI文件。

【编程思路】在Windows系统中,满屏播放AVI文件同在窗口中播放AVI文件是不同的,在满屏播放的时候不需要屏幕上的颜色进行抖动,只需要将调色板设置为AVI文件所独有的就可以了,这是因为没有其它的窗口在背景中存在的缘故。

【设计步骤】1.新建一个标准工程,创建一个新窗体,默认名为Form1

            2.Form1窗体中放置一个CommandBox控件。

            3.在同一级目录下添加一个AVI文件,命名为"1.AVI"

            4.源程序 

Option Explicit

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _

        (ByVal lpstrCommand As String, _

        ByVal lpstrReturnString As String, _

        ByVal uReturnLength As Long, _

        ByVal hwndCallback As Long) As Long

Private Sub Command1_Click()

        Dim Str As String

        Dim ReturnVal As Long

        Dim FileName As String                     

        FileName = App.Path & "\1.avi" '注意Str变量的连接,中间有空格

        Str = "play " & FileName & " fullscreen"

        ReturnVal = mciSendString(Str, 0&, 0, 0&)

End Sub

12-19 满屏播放AVI文件运行界面

【例12.9API函数,制作一个简单的AVI播放器。

【编程思路】

 通常在VB中播放AVI动画文件需要借助Animation控件来实现。该控件不是VB的内部控件,使用时要从部件中向控件工具箱添加,程序发布时需要打包Mci32.ocx(该控件包含于Mci32.ocx中)。另外如果应用程序需要同时播放多个不同的动画文件就得使用多个Animation控件,大大增加了对系统资源的消耗。其实我们完全可以用WindowsAPI函数来完成AVI动画的播放,这个API函数就是mciSendString

【设计步骤】

1.新建一个标准工程,创建一个新窗体,默认名为Form1

2.Form1窗体中放置三个CommandBox控件。

3.在同一级目录下添加一个AVI文件,命名为"1.AVI"

4.源程序 

Option Explicit

Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" _

(ByVal lpstrCommand As String, _

 ByVal lpstrReturnString As String, _

 ByVal uReturnLength As Long, _

 ByVal hwndCallback As Long) As Long '打开一个avi文件

Private Sub Command1_Click()

Dim AVI_Name As String, AVI As String

AVI_Name = App.Path & "\1.avi"  '关闭先前可能打开的avi文件

mciSendString "close MyAVI", "", 0, 0

AVI = "open " & AVI_Name & " alias MyAVI parent " & Picture1.hWnd & " style child"

 '在目标容器中打开文件

 mciSendString AVI, "", 0, 0  '设置图片框坐标系单位为pix

Picture1.ScaleMode = 3

AVI = "put MyAVI window at 0 0 " & Picture1.ScaleWidth & " " & Picture1.ScaleHeight

 '输出动画第一帧到目标容器

mciSendString AVI, "", 0, 0

Command2.Enabled = True

End Sub '播放/暂停

Private Sub Command2_Click()

  I = I + 1

  If I / 2 <> Int(I / 2) Then

    Command2.Caption = "暂停"

                                           

mciSendString "play MyAVI", "", 0, 0

   Else

    Command2.Caption = "播放"

    mciSendString "pause MyAVI", "", 0, 0

   End If

End Sub '关闭动画文件

Private Sub Command3_Click()

        I = 0: Form_Unload 0

        Command2.Enabled = False

End Sub

12-20 一个简单的AVI播放器运行界面

作者:Admin  
相关文章
  • 没有相关文章
本类推荐
  • 没有
本类固顶
  • 没有
  • VB程序设计学习网站(赣南师范学院) © 2008 版权所有 All Rights Reserved.
  • 地址:江西省赣州市经济技术开发区 赣南师范学院数学与计算机科学学院 邮政编码:341000
    Email:ZQ188@163.com 技术支持QQ:87319633 移ICP备10086号
  • GnsySjxy! V2.4