home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Tricks of the Windows Gam…ming Gurus (2nd Edition)
/
Disc2.iso
/
msdn_vcb
/
samples
/
vc98
/
atl
/
cdinfo
/
ccdinfo.cpp
next >
Wrap
C/C++ Source or Header
|
1998-03-26
|
3KB
|
96 lines
// ccdinfo.cpp : device manager class implementation
//
// This is a part of the Active Template Library.
// Copyright (C) 1996-1998 Microsoft Corporation
// All rights reserved.
//
// This source code is only intended as a supplement to the
// Active Template Library Reference and related
// electronic documentation provided with the library.
// See these sources for detailed information regarding the
// Active Template Library product.
#include "stdafx.h"
#include "ccdinfo.h"
CDInfo::CDInfo()
{
// We don't have an open device yet
m_MCIOpen.wDeviceID = 0;
m_nNumberOfTracks = 0;
}
CDInfo::~CDInfo()
{
// If we have an open device then we'll be nice and close it.
// if (m_MCIOpen.wDeviceID != -1)
// {
// mciSendCommand(m_MCIOpen.wDeviceID, MCI_CLOSE, NULL, NULL);
// }
}
short CDInfo::Read()
{
int i;
short nTrackLength;
m_nNumberOfTracks = 0;
m_MCIOpen.lpstrDeviceType = (LPCTSTR)MCI_DEVTYPE_CD_AUDIO;
if (mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID, (DWORD)(LPVOID)&m_MCIOpen))
{
ATLTRACE(_T("Couldn't open CD player"));
}
m_MCIStatus.dwItem = MCI_STATUS_NUMBER_OF_TRACKS;
if (mciSendCommand(m_MCIOpen.wDeviceID, MCI_STATUS, MCI_STATUS_ITEM|MCI_WAIT, (DWORD)(LPVOID)&m_MCIStatus))
{
ATLTRACE(_T("Error getting number of tracks"));
mciSendCommand(m_MCIOpen.wDeviceID, MCI_CLOSE, NULL, NULL);
return 0;
}
m_nNumberOfTracks = (short)m_MCIStatus.dwReturn;
if (m_nNumberOfTracks > MAX_TRACKS)
m_nNumberOfTracks = MAX_TRACKS;
m_MCIStatus.dwItem = MCI_STATUS_LENGTH;
for (i=0; i<m_nNumberOfTracks; i++)
{
m_MCIStatus.dwTrack = i+1;
mciSendCommand(m_MCIOpen.wDeviceID, MCI_STATUS, MCI_TRACK|MCI_STATUS_ITEM|MCI_WAIT, (DWORD)(LPVOID)&m_MCIStatus);
nTrackLength = (short)(MCI_MSF_MINUTE(m_MCIStatus.dwReturn)*60 + MCI_MSF_SECOND(m_MCIStatus.dwReturn));
m_nTrackLength[i] = nTrackLength;
}
mciSendCommand(m_MCIOpen.wDeviceID, MCI_CLOSE, NULL, NULL);
return m_nNumberOfTracks;
}
void CDInfo::Play(short nTrack)
{
MCI_SET_PARMS mciSet;
MCI_PLAY_PARMS mciPlay;
m_MCIOpen.lpstrDeviceType = (LPCTSTR)MCI_DEVTYPE_CD_AUDIO;
if (mciSendCommand(NULL, MCI_OPEN, MCI_OPEN_TYPE|MCI_OPEN_TYPE_ID, (DWORD)&m_MCIOpen))
{
ATLTRACE(_T("Couldn't open CD player"));
}
// Set the time format to track/minute/second/frame (TMSF).
mciSet.dwTimeFormat = MCI_FORMAT_TMSF;
if (mciSendCommand(m_MCIOpen.wDeviceID, MCI_SET, MCI_SET_TIME_FORMAT, (DWORD)&mciSet))
{
mciSendCommand(m_MCIOpen.wDeviceID, MCI_CLOSE, 0, NULL);
return;
}
mciPlay.dwCallback = 0;
mciPlay.dwFrom = MCI_MAKE_TMSF(nTrack, 0, 0, 0);
if (mciSendCommand(m_MCIOpen.wDeviceID, MCI_PLAY, MCI_FROM, (DWORD)&mciPlay))
{
ATLTRACE(_T("Error playing track"));
}
mciSendCommand(m_MCIOpen.wDeviceID, MCI_CLOSE, 0, NULL);
}