www.pudn.com > Observerwangdxh.zip > StairMaster.cpp
// StairMaster.cpp : implementation file
//
#include "stdafx.h"
#include "resource.h"
#include "StairMaster.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CStairMaster dialog
CStairMaster::CStairMaster(CWnd* pParent /*=NULL*/)
: CDialog(CStairMaster::IDD, pParent)
{
//{{AFX_DATA_INIT(CStairMaster)
// NOTE: the ClassWizard will add member initialization here
//}}AFX_DATA_INIT
// Step 1 - Initialize class members
m_pTimeMonitor = NULL;
m_pHeartRateMonitor = NULL;
m_pProgramControl = NULL;
m_pCalorieMonitor = NULL;
m_pCardioSubject = NULL;
m_nAge = 0;
m_nDuration = 0;
m_nLevel = 0;
m_csSelectedProgram = _T("");
m_pProgramsArray = NULL;
}
CStairMaster::~CStairMaster()
{
// Step 1 - Delete all allocated objects
delete m_pTimeMonitor;
delete m_pHeartRateMonitor;
delete m_pProgramControl;
delete m_pCalorieMonitor;
delete m_pCardioSubject;
}
void CStairMaster::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CStairMaster)
// NOTE: the ClassWizard will add DDX and DDV calls here
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CStairMaster, CDialog)
//{{AFX_MSG_MAP(CStairMaster)
ON_BN_CLICKED(IDOK, OnStart)
ON_BN_CLICKED(IDSTOP, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CStairMaster message handlers
INT CStairMaster::StartProgram( INT nAge, INT nDuration,
INT nLevel,
const CString & rcsSelectedProgram,
CStringArray * pProgramsArray )
{
// Step 1 - Initialize class members
ASSERT( pProgramsArray != NULL );
m_nAge = nAge;
m_nDuration = nDuration;
m_nLevel = nLevel;
m_csSelectedProgram = rcsSelectedProgram;
m_pProgramsArray = pProgramsArray;
// Step 2 - Bring up the dialog
DoModal();
// Step 3 - Return 0
return 0;
}
BOOL CStairMaster::OnInitDialog()
{
// Step 1 - Call base class method
CDialog::OnInitDialog();
// Step 2 - Create rectangles for monitors
CRect TMRect( 10, 10, 150, 130 );
CRect PCRect( 160, 10, 350, 130 );
CRect CMRect( 360, 10, 420, 130 );
CRect HRMRect( 10, 140, 410, 280 );
// Step 3 - Create cardio subject, time monitor, heart rate monitor, program control
// and calorie meter
m_pCardioSubject = new CCardioSubject( m_nDuration, m_csSelectedProgram, m_nLevel, m_nAge ); // Time, Program, Level, Age
m_pTimeMonitor = new CTimeMonitor( m_pCardioSubject );
m_pProgramControl = new CProgramControl( m_pCardioSubject );
m_pCalorieMonitor = new CCalorieMonitor( m_pCardioSubject );
m_pHeartRateMonitor = new CHeartRateMonitor( m_pCardioSubject );
m_pTimeMonitor->Create( TMRect, this, 0x10000 );
m_pHeartRateMonitor->Create( HRMRect, this, 0x10001 );
m_pProgramControl->Create( PCRect, this, 0x10002 );
m_pCalorieMonitor->Create( CMRect, this, 0x10003 );
// Step 4 - Add programs to the program list and select the currently selected program
CComboBox & rProgramList = m_pProgramControl->GetProgramCombo();
INT nIndex = 0;
INT nNoEle = m_pProgramsArray->GetSize();
for( nIndex = 0; nIndex < nNoEle; nIndex++ )
{
rProgramList.AddString( m_pProgramsArray->GetAt( nIndex ) );
}
rProgramList.SetCurSel( rProgramList.FindStringExact( -1, m_csSelectedProgram ) );
// Step 5 - Set effort level
m_pProgramControl->SetEffortLevelRange( 1, 12, m_nLevel );
return TRUE;
}
void CStairMaster::OnStart()
{
// Step 1 - Start monitors
ASSERT( m_pTimeMonitor != NULL );
m_pTimeMonitor->Start();
m_pHeartRateMonitor->Start();
m_pCalorieMonitor->Start();
}
void CStairMaster::OnStop()
{
// Step 1 - Stop monitors
ASSERT( m_pTimeMonitor != NULL );
m_pTimeMonitor->Stop();
m_pHeartRateMonitor->Stop();
m_pCalorieMonitor->Stop();
}
int CStairMaster::DoModal()
{
// Step 1 - Forward this method CDialog DoModal
return CDialog::DoModal();
}