《MFC音乐播放器(MCI)》.pdf
文本预览下载声明
MCI 的命令消息接口,所有MCI 命令消息都是通过mciSendCommand 函数发送的,函数声
明为:
MCIERROR mciSendCommand(
MCIDEVICEID wIDDevice,//设备的ID,在打开设备时不用该参数
UINT uMsg,//命令消息
DWORD fdwCommand,//命令消息的标志
DWORD dwParam //指向包含命令消息参数的结构
);//若成功则返回0,否则返回错误码
编辑本段
MCI 简介
对于程序员来说,可以把MCI 理解为设备面板上的一排按键,通过选择不同的按键(发
送不同的MCI 命令)可以让设备完成各种功能,而不必关心设备内部实现。
比如,对于play,视盘机和CD 机有不同的反应(一个是播放视频,一个播放音频),
而对用户来说却只需要按同一按钮。
应用程序通过向MCI 发送命令来控制媒体设备。MCI 命令接口分命令字符串和命令消
息两种,两者具有相同的功能。命令字符串具有使用简单的特点,但是它的执行效率不如命
令消息。
编辑本段
mciSendCommand 详细
MCI 的命令消息接口提供了C 语言接口,它速度更快,并且更能符合C/C++程序员的
需要。
所有MCI 命令消息都是通过mciSendCommand 函数发送的,函数声明为:
MCIERROR mciSendCommand(
MCIDEVICEID wIDDevice,//设备的ID,在打开设备时不用该参数
UINT uMsg,//命令消息
DWORD fdwCommand,//命令消息的标志
DWORD dwParam //指向包含命令消息参数的结构
);//若成功则返回0,否则返回错误码
变量wDeviceID 用来保存设备的ID,系统用ID来标识不同的设备,以保证命令发给正
确的对象。
void CTttView::OnMyMenu()
{
MCI_OPEN_PARMS mciOpen;
UINTwDeviceID;
mciOpen.lpstrDeviceType =avivideo;
mciOpen.lpstrElementName = myfolder\\clock.avi;
mciSendCommand(0,MCI_OPEN, MCI_OPEN_ELEMENT,(DWORD)mciOpen);
wDeviceID=mciOpen.wDeviceID;
MCI_PLAY_PARMSmciPlay;
mciSendCommand(wDeviceID,MCI_PLAY,MCI_WAIT,(DWORD)mciPlay);
);
MCI 可以通过 mciSendCommand()和mciSendString()来完成,本文仅使用
mciSendCommand()函数。
原型:DWORD mciSendCommand(UINT wDeviceID,UINT wMessage,DWORD
dwParam1,DWORD dwParam2);
参数: wDeviceID:接受消息的设备ID
wMessage:MCI 命令消息
dwParam1:命令的标志位
dwParam2:所使用参数块的指针
返值:调用成功,返回零;否则,返回双字中的低字存放有错误信息。
二MIDI 的播放控制
1. 打开设备
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType =
(LPCSTR)MCI_DEVTYPE_SEQUENCER;//MIDI 类型
OpenParms.lpstrElementName = (LPCSTR)Filename;
OpenParms.wDeviceID=0;
mciSendCommand (NULL, MCI_OPEN,
MCI_WAIT|MCI_OPEN_TYPE|
MCI_OPEN_TYPE_ID| MCI_OPEN_ELEMENT,
(DWORD)(LPVOID)OpenParms)
MCI 设备ID指明打开了哪个设备,当发送了MCI_OPEN 命令时,这个值在参数块
中返回——应被保存备用。
2. 关闭设备
显示全部