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