1、mciSendCommand函数声明
MCIERROR mciSendCommand(MCIDEVICEID IDDevice,UINT uMsg,DWORD fdwCommand,DWORD_PTP dwParam)
IDDevice:MCI设备标识符,用于接收命令消息。
uMsg:命令消息。
fdwCommand:命令消息风格。
dwParam:命令消息相关参数。
功能:发送一命令消息到指定MCI设备。函数调用成功,返回零值;否则返回零。
2、MCI_OPEN_PARMS结构声明
typedef struct{
DWORD_PTR dwCallback;
MCIDEVICED wDeviceID;
LPCTSTR lpstrDeviceType;
LPCTSTR lpstrElementName;
LPCTSTR lpstrAlias;
}MCI_OPEN_PARAMS
dwCallback:用于MCI_NOTIFY风格的窗口句柄。
wDeviceID:设备ID号。
lpstrDeviceType:设备类型名。
lpstrElementName:设备参数。
lpstrAlias:设备别名。
功能:包含MCI_OPEN信息。
3、MCI_STATUS_PARMS结构声明
typedef struct{
DWORD_PTR dwCallback;
DWORD dwReturn;
DWORD dwItem;
DWORD dwTrack;
}MCI_STATUS_PARMS
dwCallback:用于MCI_NOTIFY风格的窗口句柄。
dwReturn:包含将返回的信息。
dwItem:询问内容。
dwTrack:Track的长度。
功能:包含MCI_STATUS命令信息。
4、MCI_SET_PARMS结构声明
typedef struct{
DWORD_PTR dwCallback;
DWORD dwTimeFormat;
DWORD dwAudio;
}MCI_SET_PARMS
dwCallback:用于MCI_NOTIFY风格的窗口句柄。
dwTimeFormat:设备格式。
dwAudio:音频输出信道。
功能:包含MCI_SET命令信息。
5、MCI_PLAY_PARMS结构声明
typedef struct{
DWORD_PTR dwCallback;
DWORD dwFrom;
DWORD dwTo;
}MCI_PLAY_PARMS
dwCallback:用于MCI_NOTIFY风格的窗口句柄。
dwFrom:开始播放位置。
dwTo:结束播放位置。
功能:包含MCI_PALY命令信息。
一、创建对话框应用程序
二、编辑对话框资源

三、添加变量、函数
1、添加变量

2、添加函数
a、添加成员函数

b、添加消息响应函数

四、添加库模块

五、添加代码
1、添加包含语句:
// CD播放器Dlg.cpp : implementation file
#include "stdafx.h"
#include "CD播放器.h"
#include "CD播放器Dlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
#include <MMSystem.h>
2、为函数添加代码:
BOOL CCDPlayerDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
::mciSendCommand (m_wDeviceID, MCI_STOP, NULL, NULL);
::mciSendCommand (m_wDeviceID, MCI_CLOSE, MCI_WAIT, NULL);
return CDialog::DestroyWindow();
}
void CCDPlayerDlg::OnExit()
{
// TODO: Add your control notification handler code here
this->OnCancel();
}
void CCDPlayerDlg::OnPlay()
{
// TODO: Add your control notification handler code here
MCI_OPEN_PARMS OpenParms;
OpenParms.lpstrDeviceType = (LPCSTR) MCI_DEVTYPE_CD_AUDIO;
int ireturn=0;
ireturn=::mciSendCommand (NULL,
MCI_OPEN,
MCI_WAIT | MCI_OPEN_SHAREABLE|
MCI_OPEN_TYPE | MCI_OPEN_TYPE_ID ,
(DWORD)(LPVOID) &OpenParms); //打开MCI设备
if(ireturn==0)
{
m_wDeviceID=OpenParms.wDeviceID;
MCI_STATUS_PARMS StatusParms;
StatusParms.dwItem=MCI_STATUS_MEDIA_PRESENT;
ireturn=::mciSendCommand (m_wDeviceID,
MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID) &StatusParms); //获得设备的信息
if(ireturn==0)
{
StatusParms.dwItem = MCI_STATUS_NUMBER_OF_TRACKS;
mciSendCommand (m_wDeviceID,
MCI_STATUS, MCI_STATUS_ITEM,
(DWORD)(LPVOID) &StatusParms);
UINT cdnum=StatusParms.dwReturn; //获得曲目的数量
}
}
MCI_SET_PARMS SetParms;
SetParms.dwTimeFormat = MCI_FORMAT_TMSF;
::mciSendCommand (m_wDeviceID,
MCI_SET,
MCI_WAIT | MCI_SET_TIME_FORMAT,
(DWORD)(LPVOID) &SetParms);
::mciSendCommand (m_wDeviceID, MCI_SEEK, MCI_SEEK_TO_START, NULL);
MCI_PLAY_PARMS PlayParms;
PlayParms.dwFrom=MCI_MAKE_TMSF(1,0,0,0); //选择第一个曲目
::mciSendCommand (m_wDeviceID, MCI_PLAY, MCI_FROM,
(DWORD)(LPVOID) &PlayParms); //播放曲目
}
void CCDPlayerDlg::OnStop()
{
// TODO: Add your control notification handler code here
::mciSendCommand (m_wDeviceID, MCI_STOP, NULL, NULL);
}
void CCDPlayerDlg::OnTray(WPARAM wParam, LPARAM lParam)
{
UINT msg=UINT(lParam);
if(msg==WM_LBUTTONDBLCLK)
{
this->ShowWindow(SW_SHOWNOACTIVATE);
}
}
六、编译
七、运行

|