登陆注册
13955600000031

第31章 多媒体程序设计(4)

VB可以较为方便地调用Windows的API函数,以支持VB本身不具备的功能。Windows将系统所使用的API函数封装在一系列的动态链接库中,常见的有KERNAL.EXE,GDI.EXE,USER.EXE等,此外还有许多DLL文件。支持多媒体的DLL文件有MMSYSTEM.DLL,AAPLAY.DLL等。这些动态链接库可以看成是应用程序的函数库,一旦在应用程序中进行了声明,即建立了链接,在程序中就可像使用自己内附的函数一样调用封装在动态链接库中的函数。如果要使用的函数库文件不是放在Windows\\System目录下,则必须加上完整的路径名称。

1.声明

在VB中按照声明变量的原则,也可将动态链接的API函数声明成全局或模块级,声明指令为Declare,语法如下。

函数:DeclareFunction\[函数名\]Lib\[动态链接库文件名\](参数)\[数据类型\]

过程:DeclareSub\[过程名\]Lib\[动态链接库文件名\](参数)

如果希望这个API函数的调用返回一个函数值,则应将该函数声明成Function,反之可声明成Sub,函数名的数据类型可以省略。同时要注意的是,Declare语句中的动态链接库一定要包含有声明的API函数。

此外,API函数通常有许多参数,这是调用API函数最烦人的事,一方面要搞清楚每个参数在声明中的说明,另一方面由于传递参数的方式有两种:一种是传地址,另一种是传值。如不加以说明,VB以传地址调用,但大部分的API参数都是使用传值调用的。所以按VB的声明原则,在参数声明前要加上ByVal。

2.使用

一旦对这些API函数进行声明后,可以把它们当做和VB提供的Function或Procedure一样在VB应用程序中使用。MMSYSTEM.DLL动态链接库中,提供了一百多个具有多媒体处理功能的API函数。涉及各类多媒体设备,例如以Wave开头的API函数专门处理语音,还可直接控制PC喇叭发声:

CloseSound/OpenSound关闭/打开声音驱动程序

SetvoiQueuesize设置声音队列的大小

SetvoiceAclent设置播放音符的音速

SetvoiceNote把音符设置到声音队列中

StartSound开始播放声音

StopSound停止声音播放

这些都涉及底层函数调用,而涉及MCI命令的高级函数且和VB有关的是以下3个以MCI开头的函数:

MciSendString传送指令字符给MCI,由MCI接口解释执行指定字符串

MciExecute简单的MCI指令执行调用函数

MciGetErrorString获得MCI错误代码所表示的意思

7.5.2一些API函数的具体说明

和VB有关的MCI函数有三个,分别为mciExecute,mciSendString及mciGetErrorString,下面分别加以说明。

1.mciExecute函数

这是一个简单的MCI指令执行函数,其唯一的参数就是MCI指令字符串。该函数将MCI指令传给MCI接口,由接口解释执行。若执行mciExecute时发生错误,MCI会显示一个对话框显示错误信息,并且传回一个非零的错误代码。如果要处理该错误信息,则可用mciSendString函数进行处理。

例如,i%=mciExecute(“openCDAudioaliasCD”)

2.mciSendString函数

如在传递并执行MCI指令中,不希望在发生错误时看到系统提示的出错信息或想通过程序自行处理,则可以用mciSendString函数代替mciExecute函数。除了都有MCI指令字符串参数外,mciSendString函数的第二个参数为mciReturnString,该参数返回一个文字信息字符串,第三个参数为mciReturnLength,该参数为可接收字符串的最大长度,第四个参数是mcihWnd,在VB中设置为0即可。

必须强调在参数传递时,第二个实参数一定是定长字符串,而不能是变长字符串,第三个实参数即是其长度;其次,如果mciSendString执行不成功,会传回一个代表错误类型的非零代码。再者,在应用程序中,上述两个API函数可混合使用。

例如,DimReturnStringAsString*256

E%=mciSendString(“closeALL”,ReturnString,256,0)

注意,mciSendString实际接收的文字信息若是不定长的,则以空字符(CHW)代替字符串的结束。所以一方面可使用足够的定长字符串以容纳全部文字信息,另一方面可通过字符串处理函数(如instr函数)取得实际文字信息。

3.mciGetErrorString函数

由mciSendString函数所传回的错误代码,可通过调用mciGetErrorString函数获得错误代码所表示的具体意义,其第一个参数mciError为需要获得信息的错误代码,第二个参数mciErrorString是返回的文字字符信息,而第三个参数mciErrorLength为可接收字符串的最大长度。同样,实参的字符变量必须设定为定长,而且必须保证足够长。

7.5.3API程序设计举例

【例7.9】编写程序片段,播放德彪西的《月光》,播放时出现错误,则可显示错误信息。源程序如下:

’Module1.bas在模块中对函数进行说明。

思考与练习题一、名词解释窗口事件消息事件驱动模型对象OLEMCIAPI

二、不定项选择题

1.多媒体控件的操作对象是。

A.媒体控制接口(MCI)设备B.计算机的所有外设

C.VB应用程序D.在并行通信口和串行通信口上的设备

2.下列关于多媒体控件外观的说法中,正确的是。

A.多媒体控件的外观是固定的,不可更改

B.多媒体控件中的播放键可以由用户设置

C.多媒体控件只支持水平方向的外形

D.不显示多媒体控件就无法使用它

3.下列设备中,是多媒体控件支持的设备类型。

A.AVIB.CDAudioC.WaveAudioD.MIDI序列发生器

4.当使用多媒体控件播放音乐CD时,应将其DeviceType属性设置为。

A.AVIVideoB.WaveAudioC.CDAudioD.DigitalVideo

5.下列按键中,不是多媒体控件所具有的按键。

A.PlayB.NextC.ButtonD.Record

6.下列语句能够停止多媒体设备的播放。

A.MMControl.Command=“Pause”

B.MMControl.Command=“Close”

C.MMControl.Command=“Step”

D.MMControl.Command=“Stop”

三、填空题

1.程序界面对象共有以下三种:。

2.VB是由美国Microsoft公司推出的基于的程序开发工具,VB的程序设计风格与传统设计方法不同,它是和的程序设计方法。面向对象是一种全新的设计和构造软件的思维方法。在面向对象的程序设计中,是系统中的基本运行实体。

3.OLE是ObjectLinkingandEmbedding的缩写,意思为,其含义是将一个包含OLE功能的程序到其他基于OLE的Windows应用程序中。OLE技术是实现不同软件之间的,程序员可以把以前编写好、测试过的模块以插入到正在编写的程序中,这样就明显地提高了程序的结构性和软件开发效率。

4.Windows多媒体模块提供的与MCI有关的命令字符串接口函数有三个:。

四、简答题

1.在Windows系统中,对多媒体设备进行控制的方法有哪些?

2.什么是媒体控制接口MCI?MCI设备类型有哪些?

3.MCI命令可分为哪些类型?

4.如何在工具箱中增加MCI控件?

5.什么是API?使用API函数设计多媒体程序有何优点?

6.如何使用OLE控件设计多媒体程序?

同类推荐
  • 中国3D打印的未来

    中国3D打印的未来

    自2012年以来,有关3D打印的报道屡见报端,这一新型制造技术引起了全世界的广泛关注。《中国3D打印的未来》作者、中国3D打印技术产业联盟秘书长罗军认为,中国从20世纪90年代初开始涉足3D打印技术,并取得了巨大进展,但与国外同行相比仍存在一定差距。特别是中国3D打印企业普遍存在“小而散”、各自为政的现象,如何发挥整合优势、抱团发展是目前亟需解决的问题。如果能够加强同行合作,抱团发展,形成合力,相信3D打印会成为唯一一项中国有可能赶超世界先进水平的技术。
  • 下一代互联网

    下一代互联网

    本书系统介绍了下一代互联网的进展情况,包括下一代互联网的概念解析,国内外下一代互联网的最新发展情况,下一代互联网的关键技术进展,以及各国发展下一代互联网的政策计划。最后分析了下一代互联网对未来社会的影响,提出我国发展下一代互联网的政策建议等。全书共6章,包括互联网发展历史和现状,下一代互联网基本概念,下一代互联网研究最新进展,下一代互联网发展现状,我国发展下一代互联网现状,发展下一代互联网战略建议。
  • 中国移动智能手机的秘密

    中国移动智能手机的秘密

    《中国移动智能手机的秘密》是一本关于移动终端和移动互联网的科普书。作者将这18年通信行业中的学习、思考、实践积累成《中国移动智能手机的秘密》与大家分享。书本系统总结了手机的发展历史、TD产业界“从2G向3G演进”的移动终端产业分化重组进程、智能手机的使用方法用方法和应用指南,以及对移动互联网发展独特思考。
  • 多媒体技术

    多媒体技术

    多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术多媒体技术
  • 我看电商

    我看电商

    本书是作者近30年从事零售及电子商务管理的总结和分享。近年来电商行业在中国迅猛发展,2012年网络零售市场规模达到13,000亿人民币,诞生了淘宝、天猫、京东、当当、凡客、唯品会……等一大批全新的网络公司,电子商务正在日益深入的影响着越来越多人的生活。如今这位自称跨界老兵的电商操盘手第一次全方位剖析电商风云,细说中美电子商务发展的不同路径,评点国内各大电商企业的是是非非,详解其中的融资、模式、运营、效率……个中经验,毫无保留的娓娓道来,笔触至深,让人不禁掩卷沉思。
热门推荐
  • 紫禁聊斋

    紫禁聊斋

    鬼丫头韩映雪对紫禁城有着莫名的好感,甚至常常被某种奇异的梦境所占据。一位清史学家的儿子金润枫的出现慢慢打破了她平静的生活,在他的口中鬼丫头得到了诸多清宫里鲜为人知的故事:石匠的宫廷之行、雍正皇帝的死因、血滴子和百子图、王爷与雍正妃子的恋情……
  • 都市之吞噬魔少

    都市之吞噬魔少

    【火爆免费】五年前他成为孤儿离家出走,五年后他挟吞噬一切之威归来。家族、兵器统统吞掉,美女、校花统统臣服,而且这一世他还要吞掉地球!
  • 腹黑情侣对对碰

    腹黑情侣对对碰

    一天,突然收到爹地妈咪的信,要去“圣莉亚”学院上学。难道是有什么阴谋?去就去呗,还惹上一大堆烦人的事,还能好好上学了?“你,必需是我的!”纳尼!我,我,我还没答应跟你回家呢!
  • 回到秦朝做剑仙

    回到秦朝做剑仙

    我虽然只是一个无名剑仙。但老子是炎黄子孙、华夏后代!根正苗红!我的信仰、灵魂、梦想、家园都在这里。奶奶的,所以爷无路可退。而我能做的仅仅只是捍卫!捍卫我炎黄子孙之威!把一切来犯之敌统统消灭干净!
  • vv世界

    vv世界

    远信公社里,有着一群少年们,一次意外,一颗水晶球,一场沙雕冒险
  • 宠妻:六夫临门

    宠妻:六夫临门

    她日盼夜盼终于盼到魂穿还阳,哪知干爹竟然一把将她推下女尊国,拜托,她不想要那么多相公!“什么?想要相公,没问题,干爹这就和月老商量给你多系几条红线!”凤凰朝日,女权至上,男多女少,颠龙倒凤?“什么?要她娶夫?”
  • 撕扯paradise

    撕扯paradise

    爱,萌芽在盛夏的暗夜。窗外,霓虹闪烁.令人心动;床银问。激情四滋.爱火如炽。时价.!,在瞬间停滞。少男少女.水无休止地恋爱;惟一的情人.没能给她退柔抚姗的笑飞花心男人:问家吧.我不想再等了:多情女人:我在等你,明天嫁给你。冬青不是不解叶.撕扯Paradise,与往事干杯。
  • 绝世瞽医

    绝世瞽医

    雷霆雨露未即来,淑身止镜望明台。日犯君岁启瞽破,妙手回春克明开。出世入世难回世,居哀思哀难转哀。此冢不免尘中人,莫负君卿莫复还。
  • 明灯花开待你来

    明灯花开待你来

    (宠文—互宠,非常宠)稿子又被打回来了,宁之一吐出一口老血,明明可以靠一张女神脸吃饭,偏偏要拼文笔!自作孽,不可活。萧学霸幽幽道,不这样你哪里等的来我这朵遗世独立的“三月花”呢?我呸!这年头流行校草学霸也装神弄鬼?萧学霸又幽幽道,不是装神弄鬼,是欲得周郎顾,时时误拂弦啦。
  • 看到首领大人我馋了

    看到首领大人我馋了

    我叫箫唯一,名字是师父想了两天两夜才想出来的,因为她是唯一一只人参精……。身为天才地宝,经常被人惦记着。对此她一点感动都没有,因为此惦记非彼惦记。都离老娘远点,一个个不安好心。因为一些事情,她被雷劈了!在醒来整个世界都变了?好在捡到一只带着补药的人。