⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 0510210204watchview.cpp

📁 数码管、模拟表、数字表、闹铃、秒表计时、倒计时、动画图标、闪烁窗口等功能
💻 CPP
字号:
// 0510210204watchView.cpp : implementation of the CMy0510210204watchView class
//

#include "stdafx.h"
#include "0510210204watch.h"
#include"ClockDlg.h"
#include"DaoDialog.h"
#include"AlarmDialog.h"
#include"Dialog1.h"
#include "0510210204watchDoc.h"
#include "0510210204watchView.h"
#include"math.h"
#define pi 3.141592654
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView

IMPLEMENT_DYNCREATE(CMy0510210204watchView, CView)

BEGIN_MESSAGE_MAP(CMy0510210204watchView, CView)
	//{{AFX_MSG_MAP(CMy0510210204watchView)
	ON_COMMAND(ID_CURRENT_TIME, OnCurrentTime)
	ON_WM_TIMER()
	ON_WM_CREATE()
	ON_COMMAND(ID_SHUMA_TIME, OnShumaTime)
	ON_COMMAND(ID_JISHI_BEGIN, OnJishiBegin)
	ON_COMMAND(ID_JISHI_END, OnJishiEnd)
	ON_COMMAND(ID_JISHI_RESET, OnJishiReset)
	ON_WM_DESTROY()
	ON_COMMAND(ID_JISHI_PAUSE, OnJishiPause)
	ON_COMMAND(ID_DAOJI_BEGIN, OnDaojiBegin)
	ON_COMMAND(ID_DAOJI_END, OnDaojiEnd)
	ON_COMMAND(ID_DAOJI_SET, OnDaojiSet)
	ON_COMMAND(ID_DAOJI_PAUSE, OnDaojiPause)
	ON_COMMAND(ID_ALARM_CLOSE, OnAlarmClose)
	ON_COMMAND(ID_ALARM_SET, OnAlarmSet)
	ON_COMMAND(ID_JISUANQI, OnJisuanqi)
	ON_WM_ERASEBKGND()
	ON_COMMAND(ID_JISHI_SET, OnJishiSet)
	//}}AFX_MSG_MAP
	// Standard printing commands
	ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
	ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView construction/destruction

CMy0510210204watchView::CMy0510210204watchView()
{
	// TODO: add construction code here

}

CMy0510210204watchView::~CMy0510210204watchView()
{
}

BOOL CMy0510210204watchView::PreCreateWindow(CREATESTRUCT& cs)
{
	// TODO: Modify the Window class or styles here by modifying
	//  the CREATESTRUCT cs
	return CView::PreCreateWindow(cs);
}

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView drawing

void CMy0510210204watchView::OnDraw(CDC* pDC)
{
	CMy0510210204watchDoc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);
	// TODO: add draw code for native data here
	DrawFace(pDC);
	
}

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView printing

BOOL CMy0510210204watchView::OnPreparePrinting(CPrintInfo* pInfo)
{
	// default preparation
	return DoPreparePrinting(pInfo);
}

void CMy0510210204watchView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add extra initialization before printing
}

void CMy0510210204watchView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{
	// TODO: add cleanup after printing
}

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView diagnostics

#ifdef _DEBUG
void CMy0510210204watchView::AssertValid() const
{
	CView::AssertValid();
}

void CMy0510210204watchView::Dump(CDumpContext& dc) const
{
	CView::Dump(dc);
}

CMy0510210204watchDoc* CMy0510210204watchView::GetDocument() // non-debug version is inline
{
	ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CMy0510210204watchDoc)));
	return (CMy0510210204watchDoc*)m_pDocument;
}
#endif //_DEBUG

/////////////////////////////////////////////////////////////////////////////
// CMy0510210204watchView message handlers

void CMy0510210204watchView::ShowTime(int left, int top)
{
	CDC *pDC=GetDC();
	if(mode==0)
	{
		CTime time =CTime::GetCurrentTime();
		CString shijian;
		shijian.Format("         现在时间:%d - %02d- %02d   %02d  : %02d : %02d   ",time.GetYear(),time.GetMonth(),time.GetDay(),time.GetHour(),time.GetMinute(),time.GetSecond());
		pDC->TextOut(left,top,shijian);
	}

	else if(mode==1)
	{
		CString shijian;
		shijian.Format("           秒表时间: %02d  :%02d : %02d  %02d                            ",m_jishi_h,m_jishi_m,m_jishi_s,m_jishi_tens);
		pDC->TextOut(left,top,shijian);
	}
	else if(mode==2)
	{
		CString shijian;
		shijian.Format("           倒计时:  %02d  :%02d : %02d  %02d                             ",m_daoji_h,m_daoji_m,m_daoji_s,m_daoji_tens);
		pDC->TextOut(left,top,shijian);
	}
	DrawZhizhen(pDC);
}

void CMy0510210204watchView::OnCurrentTime() 
{
	// TODO: Add your command handler code here
	mode=0;
}

void CMy0510210204watchView::OnTimer(UINT nIDEvent) 
{
	// TODO: Add your message handler code here and/or call default
	CTime time=CTime::GetCurrentTime();
	CMenu* MainMenu;CMenu* menu; 
	{
		if(mode==1&&(!m_jishi_mode))
	{
		MainMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE);
		MainMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED);
		menu=AfxGetApp()->m_pMainWnd->GetMenu();
		menu->EnableMenuItem(ID_APP_EXIT,MF_BYCOMMAND | MF_GRAYED);

		m_jishi_tens++;
		if(m_jishi_tens==100)
		{
			m_jishi_tens=m_jishi_tens%100;
			m_jishi_s++;
			if(m_jishi_s==60)
			{	
				m_jishi_m++;
				if(m_jishi_m==60)
				{
					m_jishi_h++;
					m_jishi_s=m_jishi_s%60;
					m_jishi_h=m_jishi_h%12;
				}
			}
		
			m_jishi_m=m_jishi_m%60;
		
		}
	}
	else if(mode==2&&(!m_daoji_mode))
	{	
		MainMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE);
		MainMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND | MF_GRAYED);
		menu=AfxGetApp()->m_pMainWnd->GetMenu();
		menu->EnableMenuItem(ID_APP_EXIT,MF_BYCOMMAND | MF_GRAYED);

		if((m_daoji_s==0)&&(m_daoji_m==0)&&(m_daoji_tens==0))
		{
			OnDaojiPause();
			MessageBox("倒计时时间到!");
			return;
		}
		m_daoji_tens--;
		m_daoji_tens=(m_daoji_tens+100)%100;
		if(m_daoji_tens==99)
		{
			m_daoji_s--;			
			m_daoji_s=(m_daoji_s+60)%60;
			if(m_daoji_s==59)
			{
				m_daoji_m--;
				m_daoji_m=(m_daoji_m+60)%60;
				if(m_daoji_m==59)
				{
					m_daoji_h--;
					m_daoji_h=(m_daoji_h+12)%12;
				}
			}
		}
	}
	else 
	{
		MainMenu=AfxGetApp()->m_pMainWnd->GetSystemMenu(FALSE);
		MainMenu->EnableMenuItem(SC_CLOSE,MF_BYCOMMAND | MF_ENABLED);
		menu=AfxGetApp()->m_pMainWnd->GetMenu();
		menu->EnableMenuItem(ID_APP_EXIT,MF_BYCOMMAND | MF_ENABLED);

	}
	}
		if(m_alarm_mode)
	{
		if((m_alarmh==time.GetHour())&&(m_alarmm==time.GetMinute()))
		{
			m_alarm_mode=0;
			MessageBox("时间到!时间到!");
			//PlaySound("res\\1.wav",NULL,SND_ASYNC|SND_NODEFAULT);
		}
	}
    ShowTime(350,50);
	CView::OnTimer(nIDEvent);
}

int CMy0510210204watchView::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	// TODO: Add your specialized creation code here

	SetTimer(3,10,NULL);
	q=0;
	mode=0;
	mpoint_s=(0,0),mpoint_m=(0,0),mpoint_h=(0,0);
	m_jishi_mode=m_daoji_mode=m_alarm_mode=0;
	m_daoji_ho=m_daoji_so=m_daoji_tenso=0;m_daoji_mo=1;
	m_jishi_ho=m_jishi_mo=m_jishi_so=m_jishi_tenso=m_jishi_h=m_jishi_m=m_jishi_s=m_jishi_tens=0;
	return 0;
}

void CMy0510210204watchView::OnShumaTime() 
{
	// TODO: Add your command handler code here
	CClockDlg dlg;
	dlg.DoModal();
}

void CMy0510210204watchView::DrawFace(CDC *pDC)
{
	 CPoint pt; 
	 CString str;
	 CBrush*pBrush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));
	 CBrush*pOldBrush=pDC->SelectObject(pBrush);
	 pDC->Rectangle(503-118,202-118,503+118,202+118);  
	 pDC->SelectObject(pOldBrush);
	 double m=-pi/3, n=2.0*pi/12;   
	 for(int i=1;i<13;i++)   
	 {   
	  pt=CPoint(495,192)+CPoint(int(100*cos(m)),int(100*sin(m)));
	  str.Format("%2d",i);
	  pDC->TextOut(pt.x,pt.y,str);  
	  m+=n;   
	 } 
}

void CMy0510210204watchView::DrawZhizhen(CDC *pDC)
{
	 CTime time=CTime::GetCurrentTime();int s,m,h;
	 if(mode==0)
	 {
	  s=time.GetSecond();   
	  m=time.GetMinute();   
	  h=time.GetHour();  
	 }
	 else if(mode==1)
	 {
		 s=m_jishi_s;
		 m=m_jishi_m;
		 h=m_jishi_h;
	 }
	 else if(mode==2)
	 {
		 s=m_daoji_s;
		 m=m_daoji_m;
		 h=m_daoji_h;
	 }
	 CPen pen;
	 pen.CreatePen(0,2,RGB(255,255,255));
	 CPen *pOldPen=pDC->SelectObject(&pen); 
	 pDC->MoveTo(500,200);
	 pDC->LineTo(mpoint_s.x,mpoint_s.y); 
	 pen.DeleteObject();  

	 pen.CreatePen(0,3,RGB(255,255,255));
	 pDC->SelectObject(&pen); 
	 pDC->MoveTo(500,200);
	 pDC->LineTo(mpoint_m.x,mpoint_m.y); 
	 pen.DeleteObject();  

	 pen.CreatePen(0,4,RGB(255,255,255));
	 pDC->SelectObject(&pen); 
	 pDC->MoveTo(500,200);
	 pDC->LineTo(mpoint_h.x,mpoint_h.y); 
	 pen.DeleteObject();  
	 
	 double t=s*2.0*pi/60.0-pi/2.0;
	 pen.CreatePen(0,2,RGB(255,0,255));
	 pDC->SelectObject(&pen); 
	 pDC->MoveTo(500,200);
	 mpoint_s.x=500+80*cos(t),mpoint_s.y=200+80*sin(t);
	 pDC->LineTo(mpoint_s.x,mpoint_s.y);  
	 pen.DeleteObject();  

	 pen.CreatePen(0,3,RGB(0,255,0));   
	 pDC->SelectObject(&pen);   
	 t=(m+s/60.0)*2.0*pi/60.0-pi/2.0; 
	 pDC->MoveTo(500,200); 
	 mpoint_m.x=500+60*cos(t),mpoint_m.y=200+60*sin(t);
	 pDC->LineTo(mpoint_m.x,mpoint_m.y);  
	 pen.DeleteObject();   

	 pen.CreatePen(0,4,RGB(0,0,255));   
	 pDC->SelectObject(&pen);   
	 t=(h+m/60.0)*2.0*pi/12.0-pi/2.0;
	 pDC->MoveTo(500,200);
	 mpoint_h.x=500+45*cos(t),mpoint_h.y=200+45*sin(t);
	 pDC->LineTo(mpoint_h.x,mpoint_h.y);  
	 DeleteObject(pen);   
	 pDC->SelectObject(pOldPen);  
}
void CMy0510210204watchView::OnJishiBegin() 
{
	// TODO: Add your command handler code here
	CClientDC dc(this);
	mode=1;
	CString str;
	m_jishi_h=m_jishi_ho;
	m_jishi_m=m_jishi_mo;
	m_jishi_s=m_jishi_so;
	m_jishi_tens=m_jishi_tenso;
	str.Format("开始时间:%02d:%02d: %02d %3d  ",m_jishi_h,m_jishi_m,m_jishi_s,m_jishi_tens);
    dc.TextOut(680,80+q*30,str);
	q++;
	m_jishi_mode=0;
}
void CMy0510210204watchView::OnJishiPause() 
{
	// TODO: Add your command handler code here
	CClientDC dc(this);
	m_jishi_mode=1;
	CString str;
	str.Format("暂停时间:%02d:%02d: %02d %3d   ",m_jishi_h,m_jishi_m,m_jishi_s,m_jishi_tens);
	dc.TextOut(680,80+q*30,str);
	q++;
    m_jishi_ho=m_jishi_h;m_jishi_mo=m_jishi_m;m_jishi_so=m_jishi_s;m_jishi_tenso=m_jishi_tens;
}

void CMy0510210204watchView::OnJishiSet() 
{
	// TODO: Add your command handler code here
		CDaoDialog dlg;
	if(dlg.DoModal()==IDOK)
	{
	m_jishi_ho=dlg.m_edith;
	m_jishi_mo=dlg.m_eidm;
	m_jishi_so=dlg.m_edits;
	m_jishi_tens=0;
	}

}

void CMy0510210204watchView::OnJishiEnd() 
{
	// TODO: Add your command handler code here
	CClientDC dc(this);
	mode=0;
	CString str,str1;
	long int i=(m_jishi_h-m_jishi_ho)*360000+(m_jishi_m-m_jishi_mo)*6000+(m_jishi_s-m_jishi_so)*100+m_jishi_tens-m_jishi_tenso;
	str1.Format("中间时间:%02d:%02d: %02d %3d   ",i/360000,i%360000/6000,i%6000/100,i%100);
	dc.TextOut(680,80+q*30,str1);
	q++;
	str.Format("结束时间:%02d:%02d: %02d %3d   ",m_jishi_h,m_jishi_m,m_jishi_s,m_jishi_tens);
    dc.TextOut(680,80+q*30,str);
	q++;
	m_jishi_ho=m_jishi_h;m_jishi_mo=m_jishi_m;m_jishi_so=m_jishi_s;m_jishi_tenso=m_jishi_tens;
}

void CMy0510210204watchView::OnJishiReset() 
{
	// TODO: Add your command handler code here
	m_jishi_ho=m_jishi_h=m_jishi_m=m_jishi_s=m_jishi_tens=m_jishi_mo=m_jishi_so=m_jishi_tenso=0;
	
}
void CMy0510210204watchView::OnDestroy() 
{
	CView::OnDestroy();
	
	// TODO: Add your message handler code herE
	KillTimer(3);
}
void CMy0510210204watchView::OnDaojiBegin() 
{
	// TODO: Add your command handler code here
	mode=2;
	m_daoji_mode=0;
	m_daoji_h=m_daoji_ho;
	m_daoji_m=m_daoji_mo;
	m_daoji_s=m_daoji_so;
    m_daoji_tens=m_daoji_tenso;
}

void CMy0510210204watchView::OnDaojiEnd() 
{
	// TODO: Add your command handler code here
	mode=0;
	m_daoji_ho=m_daoji_h;
	m_daoji_mo=m_daoji_m;
	m_daoji_so=m_daoji_s;
    m_daoji_tenso=m_daoji_tens;
}

void CMy0510210204watchView::OnDaojiSet() 
{
	// TODO: Add your command handler code here	
	CDaoDialog dlg;
	if(dlg.DoModal()==IDOK)
	{
	m_daoji_ho=dlg.m_edith;
	m_daoji_mo=dlg.m_eidm;
	m_daoji_so=dlg.m_edits;
	m_daoji_tens=0;
	}

}

void CMy0510210204watchView::OnDaojiPause() 
{
	// TODO: Add your command handler code here
	m_daoji_mode=1;
	m_daoji_ho=m_daoji_h;
	m_daoji_so=m_daoji_s;
	m_daoji_mo=m_daoji_m;
    m_daoji_tenso=m_daoji_tens;
}



void CMy0510210204watchView::OnAlarmClose() 
{
	// TODO: Add your command handler code here
	m_alarm_mode=0;
}

void CMy0510210204watchView::OnAlarmSet() 
{
	// TODO: Add your command handler code here
	CAlarmDialog dlg;
	m_alarm_mode=1;
	if(dlg.DoModal()==IDOK)
	{
		m_alarmh=dlg.m_alarmh;
		m_alarmm=dlg.m_alarmm;
	}
}

void CMy0510210204watchView::OnJisuanqi() 
{
	// TODO: Add your command handler code here
	CDialog1 dlg1;
	dlg1.DoModal();
}

BOOL CMy0510210204watchView::OnEraseBkgnd(CDC* pDC) 
{
	// TODO: Add your message handler code here and/or call default
	return CView::OnEraseBkgnd(pDC);
}


⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -