www.pudn.com > speech1.rar > AlarmSet.cpp


// AlarmSet.cpp : implementation file 
// 
 
#include "stdafx.h" 
#include "Specch.h" 
#include "AlarmSet.h" 
#include  
 
#ifdef _DEBUG 
#define new DEBUG_NEW 
#undef THIS_FILE 
static char THIS_FILE[] = __FILE__; 
#endif 
 
///////////////////////////////////////////////////////////////////////////// 
// CAlarmSet dialog 
 
CAlarmSet::CAlarmSet(CWnd* pParent /*=NULL*/) 
	: CDialog(CAlarmSet::IDD, pParent) 
{ 
	//{{AFX_DATA_INIT(CAlarmSet) 
	m_warnContent = _T(""); 
	m_speakType = _T(""); 
	m_strHour = _T(""); 
	m_strMinute = _T(""); 
	m_bMon = FALSE; 
	m_bTues = FALSE; 
	m_bWend = FALSE; 
	m_bTurs = FALSE; 
	m_bFri = FALSE; 
	m_bSat = FALSE; 
	m_bSun = FALSE; 
	m_warnType = -1; 
	//}}AFX_DATA_INIT 
	m_type = 0 ; 
	m_bChangeMusic = false ; 
	m_strVoiceType[0] = "Mary" ; 
	m_strVoiceType[1] = "Mike" ; 
	m_strVoiceType[2] = "Sam" ; 
	m_strVoiceType[3] = "Chinese" ; 
 	memset(m_bWhichDayAlarm , 0 , sizeof(m_bWhichDayAlarm)) ; 
//	m_bWhichDayAlarm[0] = m_bSun ; 
//	m_bWhichDayAlarm[1] = m_bMon ; 
//	m_bWhichDayAlarm[2] = m_bTues ; 
//	m_bWhichDayAlarm[3] = m_bWend ; 
//	m_bWhichDayAlarm[4] = m_bTurs ; 
//	m_bWhichDayAlarm[5] = m_bFri ; 
//	m_bWhichDayAlarm[6] = m_bSat ; 
} 
 
void CAlarmSet::DoDataExchange(CDataExchange* pDX) 
{ 
	CDialog::DoDataExchange(pDX); 
	//{{AFX_DATA_MAP(CAlarmSet) 
	DDX_Text(pDX, IDC_EDIT1, m_warnContent); 
	DDX_CBString(pDX, IDC_COMBO3, m_speakType); 
	DDX_CBString(pDX, IDC_COMBO1, m_strHour); 
	DDX_CBString(pDX, IDC_COMBO2, m_strMinute); 
	DDX_Check(pDX, IDC_CHECK1, m_bMon); 
	DDX_Check(pDX, IDC_CHECK2, m_bTues); 
	DDX_Check(pDX, IDC_CHECK3, m_bWend); 
	DDX_Check(pDX, IDC_CHECK4, m_bTurs); 
	DDX_Check(pDX, IDC_CHECK5, m_bFri); 
	DDX_Check(pDX, IDC_CHECK6, m_bSat); 
	DDX_Check(pDX, IDC_CHECK7, m_bSun); 
	DDX_Radio(pDX, IDB_BLEBCUE, m_warnType); 
	//}}AFX_DATA_MAP 
} 
 
BEGIN_MESSAGE_MAP(CAlarmSet, CDialog) 
	//{{AFX_MSG_MAP(CAlarmSet) 
	ON_BN_CLICKED(IDC_BROWSE, OnBrowse) 
	ON_WM_CREATE() 
	ON_WM_TIMER() 
	ON_WM_PAINT() 
	ON_WM_DESTROY() 
	//}}AFX_MSG_MAP 
END_MESSAGE_MAP() 
 
///////////////////////////////////////////////////////////////////////////// 
// CAlarmSet message handlers 
 
BOOL CAlarmSet::OnInitDialog()  
{ 
	CDialog::OnInitDialog(); 
 
	// TODO: Add extra initialization here 
	// 表盘窗口 
	m_clockHwnd = (CWnd*)GetDlgItem(IDC_CLOCK) ; 
 
	CString Str ; 
 
	for(int i = 0 ; i < 24 ; i++) 
	{ 
		Str.Format("%d" , i) ; 
		((CComboBox*)GetDlgItem(IDC_COMBO1))->AddString(Str) ; 
	} 
 
	((CComboBox*)GetDlgItem(IDC_COMBO1))->SetCurSel(atoi(m_strHour)) ; 
 
	for(i = 0 ; i < 60 ; i += 1) 
	{ 
		Str.Format("%d" , i) ; 
		((CComboBox*)GetDlgItem(IDC_COMBO2))->AddString(Str) ; 
	} 
	((CComboBox*)GetDlgItem(IDC_COMBO2))->SetCurSel(atoi(m_strMinute)) ; 
 
	// 在CComboBox框中加入可选择的声音类型 
 
	for (int j = 0 ; j < 4 ; j++)  
	{ 
		((CComboBox*)GetDlgItem(IDC_COMBO3))->AddString(m_strVoiceType[j]) ; 
	} 
 
	((CComboBox*)GetDlgItem(IDC_COMBO3))->SetCurSel(m_type) ; 
 
	return TRUE;  // return TRUE unless you set the focus to a control 
	              // EXCEPTION: OCX Property Pages should return FALSE 
} 
 
void CAlarmSet::OnOK()  
{ 
	// TODO: Add extra validation here 
	UpdateData() ; 
	m_bWhichDayAlarm[0] = m_bSun ; 
	m_bWhichDayAlarm[1] = m_bMon ; 
	m_bWhichDayAlarm[2] = m_bTues ; 
	m_bWhichDayAlarm[3] = m_bWend ; 
	m_bWhichDayAlarm[4] = m_bTurs ; 
	m_bWhichDayAlarm[5] = m_bFri ; 
	m_bWhichDayAlarm[6] = m_bSat ; 
	m_type = ((CComboBox*)GetDlgItem(IDC_COMBO3))->GetCurSel() ; 
	CDialog::OnOK(); 
} 
 
void CAlarmSet::OnBrowse()  
{ 
	// TODO: Add your control notification handler code here 
	CFileDialog fileDlg(true , NULL , NULL , OFN_HIDEREADONLY , 
		"波形声音文件(*.wav)|*.wav|所有文件(*.*)|*.*||") ; 
 
	if(fileDlg.DoModal() == IDOK) 
	{ 
		m_bChangeMusic = true ; 
		m_musicPath = fileDlg.GetPathName() ; 
		UpdateData(FALSE) ; 
	}	 
} 
 
int CAlarmSet::OnCreate(LPCREATESTRUCT lpCreateStruct)  
{ 
	if (CDialog::OnCreate(lpCreateStruct) == -1) 
		return -1; 
	 
	// TODO: Add your specialized creation code here 
	SetTimer(6 , 1000 , NULL) ; 
	 
	return 0; 
} 
 
void CAlarmSet::OnTimer(UINT nIDEvent)  
{ 
	// TODO: Add your message handler code here and/or call default 
	RECT Rect ; 
	m_clockHwnd->GetClientRect(&Rect) ; 
 
	// refresh 
	InvalidateRect(&Rect , FALSE) ; 
	 
	CDialog::OnTimer(nIDEvent); 
} 
 
void CAlarmSet::OnPaint()  
{ 
	CPaintDC dc(this); // device context for painting 
	 
	// TODO: Add your message handler code here 
	 
	HDC adc = ::GetDC(m_clockHwnd->m_hWnd) ;   // 存在设备中 
	HDC pDC = ::CreateCompatibleDC(adc) ;    // 映射到内存中 
 
	// 得到窗口的大小 
	RECT Rect ; 
	m_clockHwnd->GetClientRect(&Rect) ; 
 
	// 设置圆心的位置 
	int Rr = Rect.right ; 
	int Rb = Rect.bottom ; 
	int Rl = Rect.left ; 
	int Rt = Rect.top ; 
	int nCenterX = Rr / 2 ; 
	int nCenterY = Rb / 2 ; 
	 
	// 创建内存描述表 
	HBITMAP hdcMem = CreateCompatibleBitmap(adc , Rr , Rb) ; 
	SelectObject(pDC , hdcMem) ; 
	SetBkMode(pDC , TRANSPARENT) ; 
//	BitBlt(pDC , Rl , Rt , Rr , Rb , adc , Rl , Rl , NOTSRCCOPY) ; 
	HPEN hpen = CreatePen(PS_SOLID,0,RGB(227 , 227 , 227)); 
    HBRUSH hbr = CreateSolidBrush(RGB(227 , 227 , 227)); 
	SelectObject(pDC,hbr); 
	SelectObject(pDC,hpen); 
	Rectangle(pDC,Rl,Rt,Rr,Rb);	// 在内存中转换内容 
 
 
	CString strDigits ;      // 表盘显示时间数字 
	int i , x , y ; 
	double Radians ;         // 指针转过的弧度 
 
	HPEN Pen = CreatePen(PS_SOLID , 3 , RGB(0 , 125 , 0)) ; 
 
	// Select the new pen into the DC and  
	// remember the pen that was selected out 
 
	HPEN pOldPen = (HPEN)SelectObject(pDC , Pen) ; 
 
	CTime curTime = CTime::GetCurrentTime() ;  // 得到当前的时间 
	CString strTime ; 
 
	// 设置文本的颜色即日期和时间显示的颜色 
	SetBkColor(pDC,TRANSPARENT); 
	SetTextColor(pDC , RGB(255 , 0 , 0)) ; 
 
	// 显示日期 
	strTime.Format("%d年%d月%d日" , curTime.GetYear() , curTime.GetMonth() , curTime.GetDay()) ; 
	TextOut(pDC , nCenterX - 50 , nCenterY + 10 , strTime , strlen(strTime)) ; 
 
	// 显示时间 
	strTime.Format("%d: %d: %d" , curTime.GetHour() , curTime.GetMinute() , curTime.GetSecond()) ; 
	TextOut(pDC , nCenterX - 25 , nCenterY + 25 , strTime , strlen(strTime)) ; 
	 
	//画表盘点数 
	HPEN PotPen = CreatePen(PS_SOLID , 1 , RGB(0 , 0 , 255)) ; 
	SelectObject(pDC , PotPen) ; 
 
	SetTextColor(pDC , RGB(0 , 0 , 128)) ; 
	 
	for(i = 1 ; i <= 60 ; i++) 
	{ 
		// Format the digit CString object for the current clock number 
		strDigits.Format("%d" , i / 5) ; 
 
		// Calculate the number of radians for the current clock number 
		Radians = (double)i * 6.28 / 60.0 ; 
		 
		// Calculate the x and y coordinate 
		x = nCenterX + (int)((double)(nCenterX - 8) * sin(Radians)) ; 
		y = nCenterY - (int)((double)(nCenterY - 8) * cos(Radians)) ; 
 
		// 画出小时单位的标记标记即数字 
		if(i % 5 == 0) 
		{ 
			TextOut(pDC , x - 3 , y - 6 , strDigits , strlen(strDigits)) ; 
		} 
		else 
		{ 
			Rectangle(pDC , x , y , x + 3 , y + 3) ;  // 画出时刻点 
		} 
	} 
 
	// 画出时针 
	// Calculate the radians for the hour hand 
	Radians = (double)curTime.GetHour() + (double)curTime.GetMinute() / 60.0 
		+ (double)curTime.GetSecond() / 3600.0 ; 
	Radians *= 6.28 / 12.0 ; 
 
	// Create a pen for the hour hand that's five pixels wide with a green color 
	HPEN HourPen = CreatePen(PS_SOLID , 5 , RGB(0 , 0 , 255)) ; 
	SelectObject(pDC , HourPen) ; 
 
	MoveToEx(pDC , nCenterX , nCenterY , NULL) ; 
	LineTo(pDC , nCenterX + (int)((double)(nCenterX / 2) * sin(Radians)) , 
		nCenterY - (int)((double)(nCenterY / 2) * cos(Radians))) ; 
	 
	// 画出分针 
	Radians = (double)curTime.GetMinute() + (double)curTime.GetSecond() / 60.0 ; 
	Radians *= 6.28 / 60.0 ; 
 
	HPEN MinutePen = CreatePen(PS_SOLID , 3 , RGB(166 , 202 , 240)) ; 
	SelectObject(pDC , MinutePen) ; 
	 
	MoveToEx(pDC , nCenterX , nCenterY , NULL) ; 
	LineTo(pDC , nCenterX + (int)((double)((nCenterX * 2) / 3) * sin(Radians)) , 
		nCenterY - (int)((double)((nCenterY * 2) / 3) * cos(Radians))) ; 
 
	// 画出秒针 
	Radians = (double)curTime.GetSecond() ; 
	Radians *= 6.28 / 60.0 ; 
 
	HPEN SecondPen = CreatePen(PS_SOLID , 1 , RGB(0 , 0 , 128)) ; 
	SelectObject(pDC , SecondPen) ; 
 
	MoveToEx(pDC , nCenterX , nCenterY , NULL) ; 
	LineTo(pDC , nCenterX + (int)((double)((nCenterX * 5) / 6) * sin(Radians)) , 
		nCenterY - (int)((double)((nCenterY * 5) / 6) * cos(Radians))) ; 
	 
	// 画出表盘的中心点 
	SelectObject(pDC , Pen) ; 
	Ellipse(pDC , nCenterX - 6 , nCenterY - 6 , nCenterX + 6 , nCenterY + 6) ; 
 
	// 恢复原先的笔 
	SelectObject(pDC , pOldPen) ; 
 
	// 将内存设备描述表中的内容传到屏幕 
	BitBlt(adc , Rl , Rt , Rr , Rb , pDC , Rl , Rl , SRCCOPY) ; 
//	SetBkMode(pDC , TRANSPARENT) ; 
 
	DeleteObject(Pen) ; 
	DeleteObject(MinutePen) ; 
	DeleteObject(HourPen) ; 
	DeleteObject(SecondPen) ; 
	DeleteObject(hdcMem) ; 
	DeleteObject(PotPen) ; 
	DeleteObject(pOldPen) ; 
	DeleteObject(hpen) ; 
	DeleteObject(hbr) ; 
 
	// 释放设备表 
	::ReleaseDC(this->m_hWnd , pDC) ; 
	::ReleaseDC(this->m_hWnd , adc) ; 
	// 加到保险 
	::DeleteDC(pDC) ; 
	::DeleteDC(adc) ;	 
	// Do not call CDialog::OnPaint() for painting messages 
} 
 
void CAlarmSet::OnDestroy()  
{ 
	CDialog::OnDestroy(); 
	 
	// TODO: Add your message handler code here 
	KillTimer(6) ; 
	 
} 
 
void CAlarmSet::SetWhichDayAlarm(int dayArray[]) 
{ 
//	UpdateData() ; 
	m_bSun = dayArray[0] ; 
	m_bMon = dayArray[1] ; 
	m_bTues = dayArray[2] ; 
	m_bWend = dayArray[3] ; 
	m_bTurs = dayArray[4] ; 
	m_bFri = dayArray[5] ; 
	m_bSat = dayArray[6] ; 
//	UpdateData(false) ; 
}