在一个mci的处理过程中,必须使用以下流程:
- 打开一个mci设备。
- 然后open播放mci设备,其间可以暂停和停止播放,
- 最后关闭mci设备。
在以上任何步骤中,都可以用状态检测函数检测工作状态。
下面我们看一下mci的实现过程:
- open mci
首先,我们 初始化一个mci_open_parms的结构,其中要用到两个值。
其中mciopen.lpstrdevicetype指定了要打开的设备类型,这些设备类型可从前面的 “mci设备类型”选取。可以是标识或描述字符串,例如语句mciopen.lpstrdevicetype=mci_devtypevcr与语句 mciopen.lpstrdevicetype="vcr"是等价的。若不指定类型则计算机将根据文件名自动识别设备,接下来 mciopen.lpstrelimmentname指定了要打开的文件名,最后调用mcisendcomand指定计算机将在结构的wdeviceid 中填入打开的设备代码;以后应用程序将根据此设备代码访问mci设备。
这里谈一下三种打开方式的区别:
[1]:自动识别:打开一个"wav"文件
mci_open_parms mciopen;
mciopen.lpstrdevicetype=0;
mciopen.lpstrelementname="aaa.wav";
mcisendcommand(null,mci_open, mci_open_element,
(dword)&mciopen);
[2]:指定设备描述:打开cd播放器
mci_open_parms mciopen;
mciopen.lpstrdevicetype=(lpstr)mci_devtype_cd_audio ;
mcisendcommand(null,mci_open,mci_open_type | mci_open_type_id,
(dword)&mciopen);
[3]:指定描述字符串: 打开一个avi文件
mci_open_parms mciopen;
mciopen.lpstrdevicetype="avivideo";
mciopen.lpstrelementname="aaa.avi";
mcisendcommand(null,mci_open,mci_open_type
| mci_open_element,
(dword)&mciopen);
请注意mcisendcommand函数第三个参数的区别:
mci_open_type:表示要使用mci_open_parms结构中的lpstrdivicetype参数,这可区分指定设备打开方式和自动识别方式之间的区别。在自动方式中,不需使用lpstrdevicetype参数。因此,也不需指定mci_open_type。
mci_open_element:表示lpstrdevicetype参数中的是设备表述字符串。
mci_open_type_id:表示lpstrdevicetype参数中的是设备描述。
2 playmci:
在play函数中,需要一个返回窗口句柄,以便应用程序在播放结束后向此窗口发送一个消息,告诉窗口已经播放结束。我们首先初始化一个mci_play_parms的数据结构:将其中dwcallback参数赋与窗口句柄。然后调用 mcisendcommend,当然发送的指令是mci_play,告诉系统开始播放,另外第三个参数指定mci_notify,告诉系统播放完后要通知自己。
querymci:
要想检测mci播放状态,就要发送指mci_status,并标志mci_status_ item,返回值在结构mci_status_parms的dwreturn上。
关于mci的进一步详细情况,本章节将不再讲述,有关mci中用到的命令详解、 数据结构,请大家自己查阅本书配套图书。