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(); 
}