private:
float i,j,k;
// 闹钟View.cpp : C闹钟View 类的实现
//
#include "stdafx.h"
#include "闹钟.h"
#include "闹钟Doc.h"
#include "闹钟View.h"
#include<cmath>
#include<cstdlib>
#include <Windows.h>
#include <CTime>
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// C闹钟View
IMPLEMENT_DYNCREATE(C闹钟View, CView)
BEGIN_MESSAGE_MAP(C闹钟View, CView)
ON_WM_TIMER()
ON_WM_CREATE()
ON_WM_ERASEBKGND()
END_MESSAGE_MAP()
// C闹钟View 构造/析构
C闹钟View::C闹钟View()
{
// TODO: 在此处添加构造代码
}
C闹钟View::~C闹钟View()
{
}
BOOL C闹钟View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// C闹钟View 绘制
void C闹钟View::OnDraw(CDC* pDC)
{
float x,y;
float r=125;
pDC->MoveTo(125,0);
for(float a=0;a<=2*3.14159;a+=0.008)
{
x=r*cos(a);
y=r*sin(a);
pDC->LineTo(x,y);
}
pDC->MoveTo(0,-125);
pDC->LineTo(0,-110);
pDC->MoveTo(0,125);
pDC->LineTo(0,110);
pDC->MoveTo(-125,0);
pDC->LineTo(-110,0);
pDC->MoveTo(125,0);
pDC->LineTo(110,0);
pDC->MoveTo(62.5,-108.25);
pDC->LineTo(57.5,-99.59);
pDC->MoveTo(108.25,-62.5);
pDC->LineTo(99.59,-57.5);
pDC->MoveTo(62.5,108.25);
pDC->LineTo(57.5,99.59);
pDC->MoveTo(108.25,62.5);
pDC->LineTo(99.59,57.5);
pDC->MoveTo(-62.5,-108.25);
pDC->LineTo(-57.5,-99.59);
pDC->MoveTo(-108.25,-62.5);
pDC->LineTo(-99.59,-57.5);
pDC->MoveTo(-62.5,108.25);
pDC->LineTo(-57.5,99.59);
pDC->MoveTo(-108.25,62.5);
pDC->LineTo(-99.59,57.5);
i=30*h*3.14159/180; //hour!!!
j=6*mm*3.14159/180;
k=6*s*3.14159/180;
pDC->MoveTo(0,0);
pDC->LineTo((r-10)*sin(k),-(r-10)*cos(k)); //y轴向下为正!
pDC->MoveTo(0,0);
pDC->LineTo((r-30)*sin(j),-(r-30)*cos(j));
pDC->MoveTo(0,0);
pDC->LineTo((r-50)*sin(i),-(r-50)*cos(i));
//pDC->TextOut(-50,150,"2009年10月24日");
pDC->TextOut(400,200,"制作:陈 鹏");
pDC->TextOut(400,230,"2009年10月24日");
//Invalidate(true);
}
// C闹钟View 诊断
#ifdef _DEBUG
void C闹钟View::AssertValid() const
{
CView::AssertValid();
}
void C闹钟View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
C闹钟Doc* C闹钟View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(C闹钟Doc)));
return (C闹钟Doc*)m_pDocument;
}
#endif //_DEBUG
// C闹钟View 消息处理程序
void C闹钟View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
CView::OnPrepareDC(pDC, pInfo);
CRect clientrect;
GetClientRect(clientrect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(clientrect.right,clientrect.bottom);
pDC->SetWindowOrg(0,0);
pDC->SetViewportExt(clientrect.right,clientrect.bottom);
pDC->SetViewportOrg(clientrect.right/2,clientrect.bottom/2);
}
void C闹钟View::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
CTime t=CTime::GetCurrentTime();
h=t.GetHour();
mm=t.GetMinute();
s=t.GetSecond();
Invalidate();
CView::OnTimer(nIDEvent);
}
void C闹钟View::OnInitialUpdate()
{
CView::OnInitialUpdate();
// TODO: 在此添加专用代码和/或调用基类
}
int C闹钟View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
// TODO: 在此添加您专用的创建代码
SetTimer(1,1000,NULL);
return 0;
}
BOOL C闹钟View::OnEraseBkgnd(CDC* pDC)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
return CView::OnEraseBkgnd(pDC);
}
原来不能重绘的而且时间不符的版本代码如下:
// 闹钟View.cpp : C闹钟View 类的实现
//
#include "stdafx.h"
#include "闹钟.h"
#include "闹钟Doc.h"
#include "闹钟View.h"
#include<cmath>
#include<cstdlib>
#include <Windows.h>
#include <CTime>
#include <string>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// C闹钟View
IMPLEMENT_DYNCREATE(C闹钟View, CView)
BEGIN_MESSAGE_MAP(C闹钟View, CView)
ON_WM_TIMER()
END_MESSAGE_MAP()
// C闹钟View 构造/析构
C闹钟View::C闹钟View()
{
// TODO: 在此处添加构造代码
}
C闹钟View::~C闹钟View()
{
}
BOOL C闹钟View::PreCreateWindow(CREATESTRUCT& cs)
{
// TODO: 在此处通过修改
// CREATESTRUCT cs 来修改窗口类或样式
return CView::PreCreateWindow(cs);
}
// C闹钟View 绘制
void C闹钟View::OnDraw(CDC* pDC)
{
float x,y;
float r=125;
pDC->MoveTo(125,0);
for(float a=0;a<=2*3.14159;a+=0.008)
{
x=r*cos(a);
y=r*sin(a);
pDC->LineTo(x,y);
}
pDC->MoveTo(0,-125);
pDC->LineTo(0,-110);
pDC->MoveTo(0,125);
pDC->LineTo(0,110);
pDC->MoveTo(-125,0);
pDC->LineTo(-110,0);
pDC->MoveTo(125,0);
pDC->LineTo(110,0);
pDC->MoveTo(62.5,-108.25);
pDC->LineTo(57.5,-99.59);
pDC->MoveTo(108.25,-62.5);
pDC->LineTo(99.59,-57.5);
pDC->MoveTo(62.5,108.25);
pDC->LineTo(57.5,99.59);
pDC->MoveTo(108.25,62.5);
pDC->LineTo(99.59,57.5);
pDC->MoveTo(-62.5,-108.25);
pDC->LineTo(-57.5,-99.59);
pDC->MoveTo(-108.25,-62.5);
pDC->LineTo(-99.59,-57.5);
pDC->MoveTo(-62.5,108.25);
pDC->LineTo(-57.5,99.59);
pDC->MoveTo(-108.25,62.5);
pDC->LineTo(-99.59,57.5);
CTime t=CTime::GetCurrentTime();
int h=t.GetHour();
int mm=t.GetMinute();
int s=t.GetSecond();
i=6*h*3.14159/180;
j=6*mm*3.14159/180;
k=6*s*3.14159/180;
pDC->MoveTo(0,0);
pDC->LineTo((r-10)*cos(k),(r-10)*sin(k));
pDC->MoveTo(0,0);
pDC->LineTo((r-30)*cos(j),(r-30)*sin(j));
pDC->MoveTo(0,0);
pDC->LineTo((r-50)*cos(i),(r-50)*sin(i));
//pDC->TextOut(-50,150,"2009年10月23日");
pDC->TextOut(400,200,"制作:陈鹏");
pDC->TextOut(400,230,"2009年10月23日");
//Invalidate(false);
}
// C闹钟View 诊断
#ifdef _DEBUG
void C闹钟View::AssertValid() const
{
CView::AssertValid();
}
void C闹钟View::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
C闹钟Doc* C闹钟View::GetDocument() const // 非调试版本是内联的
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(C闹钟Doc)));
return (C闹钟Doc*)m_pDocument;
}
#endif //_DEBUG
// C闹钟View 消息处理程序
void C闹钟View::OnPrepareDC(CDC* pDC, CPrintInfo* pInfo)
{
// TODO: 在此添加专用代码和/或调用基类
CView::OnPrepareDC(pDC, pInfo);
CRect clientrect;
GetClientRect(clientrect);
pDC->SetMapMode(MM_ANISOTROPIC);
pDC->SetWindowExt(clientrect.right,clientrect.bottom);
pDC->SetWindowOrg(0,0);
pDC->SetViewportExt(clientrect.right,clientrect.bottom);
pDC->SetViewportOrg(clientrect.right/2,clientrect.bottom/2);
SetTimer(1,1000,NULL);
}
void C闹钟View::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
//CDC* pDC=GetDC();
//C闹钟View::OnDraw(pDC);
//ReleaseDC(pDC);
CView::OnTimer(nIDEvent);
}
仔细体会!想明白错在哪里
又经过3分08秒,截图如下: