c++程序设计(下)
—指针式时钟。
姓名: 李望学。
班级: 1020551
学号: 40
指导老师: 孔令德。
时间:2011年12月7
设计描述。1.1.1 在应用程序中,经常有一些任务需要在后台处理,实现方式有两种:计时器和onidle循环处理。本案例将使用计时器创建一个时钟。
1.1.2 计时器是程序中最常用的后台任务机制之一,其时间间隔最低约55毫秒,被广泛用于时钟、磁盘备份程序或需要在某一时刻运行的程序等。
1.1.3 使用计时器只需了解两个函数:
cwnd::settimer()函数用来设置一个计时器以指定的时间间隔触发,cwnd::killtimer()函数用来使一个正在运行的计时器停止。
1.1.4 计时器以两种方式通知应用程序计时器间隔时间已到:
发送wm_timer消息和调用应用程序定义的**函数。其中前者相对比较简单,但对于多个计时器则应使用**函数。计时器消息发送给应用程序时都是低优先级,因此只有当消息对列表中没有其他消息时才会处理它们。
2 设计分析。
2.1.1 用mfc appwizard(exe)创建一个新工程,将其命名为b04。
2.1.2 在mfc appwizard第一步中设置应用程序的类型为单个文档模式,然后单击“确定”按钮,于是应用程序b04就创建完成。
2.1.3 打开mfc classwizard,为b04view类添加oncreate和ontimer函数。
2.1.4 编辑ondraw方法的**,实现绘制时钟;编辑ontimer函数的**,用来更新窗口;编辑oncreate方法,用来设置时钟。
3 源**。
3.1.1 头文件定义类cb04view的接口,完成变量初始化。
class cb04view : public cview
protected: /create from serialization only
cb04view();
declare_dyncreate(cb04view)
public:
cb04doc* getdocument();
public:
public:
virtual void ondraw(cdc* pdc); overridden to draw this view
virtual bool precreatewindow(createstruct& cs);
protected:
virtual bool onprepareprinting(cprintinfo* pinfo);
virtual void onbeginprinting(cdc* pdc, cprintinfo* pinfo);
virtual void onendprinting(cdc* pdc, cprintinfo* pinfo);
public:
virtual ~cb04view();
#ifdef _debug
virtual void assertvalid() const;
virtual void dump(cdumpcontext& dc) const;
#endif
protected:
protected:
/创建视图消息处理函数。
afx_msg int oncreate(lpcreatestruct lpcreatestruct);
/计时器消息处理函数。
afx_msg void ontimer(uint nidevent);
//}afx_msg
declare_message_map()
3.1.2源文件类cb04view的实现文件。
3.1.2.1 消息映射定义。
begin_message_map(cb04view, cview)
//}afx_msg_map
// 标准输入命令。
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()
3.1.2.2 cb04view构造函数和析构函数。
cb04view::cb04view()
cb04view::~cb04view()
3.1.2.3客户区重绘函数,用来绘制时钟。
void cb04view::ondraw(cdc* pdc)
cb04doc* pdoc = getdocument();
assert_valid(pdoc);
//获取客户区。
rect rect;
getclientrect(&rect);
//计算椭圆中心位置。
int centerx =
int centery =
//取当前时间。
ctime time = ctime::getcurrenttime();
cstring str;
int i,x,y;
csize size;
//创建一支黄色的笔,用来画椭圆。
cpen pen(ps_solid,5,rgb(255,255,0));
//设置当前画笔,并记下以前的画笔。
cpen *oldpen = pdc->selectobject(&pen);
//绘制钟面椭圆。
pdc->ellipse(5,5,double radians;
//设置字体颜色为红色。
pdc->settextcolor(rgb(255,0,0));
for(i = 1;i <=12;i++)
//计算时钟指针的夹角。
radians = double) +
(double)
radians *=6.28/12.0;
//创建时钟指针画笔。
cpen hourpen(ps_solid,5,rgb(0,255,0));
pdc->selectobject(&hourpen);
//绘制时钟指针。
pdc->moveto(centerx,centery);
pdc->lineto(centerx + int)((double)(centerx/3)*sin(radians)),centery -(int)((double)(centery/3)*cos(radians)))
radians = double)
radians *=6.28/60.0;
//创建分钟指针画笔。
cpen minutepen(ps_solid,3,rgb(0,0,255));
pdc->selectobject(&minutepen);
//绘制分钟指针。
pdc->moveto(centerx,centery);
pdc->lineto(centerx + int)((double)(centerx*2)/3)*sin(radians),centery - int)((double)(centery*2/3)*cos(radians)))
radians = double)
radians *=6.28/60.0;
//创建秒钟指针画笔。
cpen secondpen(ps_solid,1,rgb(0,255,255));
pdc->selectobject(&secondpen);
//绘制秒钟指针。
pdc->moveto(centerx,centery);
pdc->lineto(centerx + int)((double)(centerx*4)/5)*sin(radians),centery - int)((double)(centery*4)/5*cos(radians)))
pdc->selectobject(oldpen);
3.1.2.4 视图创建消息处理函数,初始化计时器。
int cb04view::oncreate(lpcreatestruct lpcreatestruct)
3.1.2.5 计时器消息处理函数。
void cb04view::ontimer(uint nidevent)
invalidaterect(null,true);
updatewindow();
cview::ontimer(nidevent);
4. 设计总结。
4.1.1 需要注意的是,计时器消息不是和其他消息异步处理的,即计。
课程设计报告格式 课程设计
洛阳理工学院。课程设计说明书。课程名称。设计课题。专业。班级。学号。姓名。完成日期2014年12月26日。问题描述 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的内容要求。基本要求 小四宋体,行间距单倍行距,每段缩进两个字符。叙述一下设计的基本要求。测试数据 小四宋体,行间距单倍行距,每...
课程设计总结,课程设计报告
课程设计总结,课程设计报告。3.尝试应用项目管理软件进行项目进程的规划管理 绘制甘特图,不作硬性要求 二 选题说明。人事管理是企业信息管理的重要部分,面对大量的人事工资信息,财务部门采用人力处理将浪费大量的时间 人力和物力,且数据的准确性低。因此,开发一个界面友好,易于操作的人事工资管理软件进行自动...
课程设计 课程设计报告格式
学校名。课程设计报告。课程名称 c语言程序设计 系别 专业班级 学号。姓名。课程题目 企业人事管理系统 完成日期 指导老师 年月日。附件。课程设计的内容。企业人事管理系统 本项目的目标是开发一个功能实用,操作简便,简单明了的人事管理系统。能够录入人事的基本资料,在操作上能够完成诸如添加 修改 删除 ...