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);
}
}
六、編譯
七、運行

|