桌面时钟设计与实现

上传人:cn****1 文档编号:501699979 上传时间:2022-08-13 格式:DOCX 页数:9 大小:108.06KB
返回 下载 相关 举报
桌面时钟设计与实现_第1页
第1页 / 共9页
桌面时钟设计与实现_第2页
第2页 / 共9页
桌面时钟设计与实现_第3页
第3页 / 共9页
桌面时钟设计与实现_第4页
第4页 / 共9页
桌面时钟设计与实现_第5页
第5页 / 共9页
点击查看更多>>
资源描述

《桌面时钟设计与实现》由会员分享,可在线阅读,更多相关《桌面时钟设计与实现(9页珍藏版)》请在金锄头文库上搜索。

1、桌面时钟设计与实现成员:李睿江秀伟许艺韬 专业班级:通信 11401实践日期: 2014年月 6日-2014 年 1月 17 日一、综合训练目的与要求本次面向对象编程实践是学习了 C+面向对象程序设计之后进行的必要的实践性环节。由于 各种原因,信息管理与信息系统专业是在学习了一年之后才安排了这个实习,因为就在考试 周,任务有点繁重。本课综合训练的目的和任务:1. 重温和加深对C+面向对象编程语言的基本知识的理解和掌握;2.掌握C+语言编程和程 序调试的基本技能;3. 利用网络资源,自己学习MFC或者Qt等相关软件对页面进行布局;4. 学会与他人协作进行小软件的设计,遇到分歧时,能够处理得当,共

2、同完成实践要求。二、综合训练任务(1)需求分析 随着计算机的普及,人们对计算机的要求远不是当初的进行大型数据运算和复杂数据分析了 人与人之间的日常交流,交易等等也都通过计算机来完成了。因为是“日常用品”,当然想 让它看起来舒服一些了,因此,人们对电脑桌面美观实用的需求也达到了一定的程度,现在 的生活节奏也快了,都希望在最短的时间内完成最多的事,获取最大的信息量。人们为了在 用计算机工作的同时,随时了解时间,不错过自己的行程安排。都会在电脑桌面安装一个显 示时间日历的小工具,所以桌面时钟的需求还是挺大的。(2)任务桌面时钟是日常小工具,所以良好的人机界面应该做到采用面向对象思想设计实现各种类因为

3、涉及界面,所以要运用界面设计,我们选择采用QT做界面设计能够通过自学习运用自带函数来实现功能在实习期间,完成自己负责部分代码的编写和调试,并完成规范的实习论文三、总体设计(1)主要模块划分门加常休布同从.1的吋紳图 1主要模块(2)模块说明 圆盘时钟:指的是圆盘时钟,也就是说,有时针分针秒针显示的时钟,这一模块中,需要绘 制各个时针。电子时钟:我们把它定义为向电子表那样显示的时钟部分,每秒更新一次,并显示出来。 日历:日历就是显示当前日历,并能查询前后的日历。整体布局:整体布局时,分为水平布局和垂直布局,水平布局用来布局圆盘时钟和电子时钟 并行排列,组合之后,和日历的布局用垂直布局完成。圆盘时

4、钟和电子时钟的单布局也是用 垂直布局完成的。四、详细设计说明(1) 类 图(2)设计说明 圆盘时钟:指的是圆盘时钟,也就是说,有时针分针秒针显示的时钟,这一模块中,需要绘 制各个时针,有我的同伴完成,具体实现过程我也限于了解,是先把默认原点坐标移动到中 心处,然后分别画刷填充等,定义好指针的形状颜色后,分别画出时针分针秒针,读取当前 时间,将各指针每段时间应该旋转的角度计算并设定好,就构成了圆盘时钟了。 电子时钟:我们把它定义为向电子表那样显示的时钟部分,每秒更新一次,并显示出来。默 认状态下,显示的数字位数(包括他们之间的冒号)为5 为,这时候,显示的只有小时和分 钟。所以要先将它改为8 位

5、的格式,让它把小时、分钟、秒钟都显示出来。 日历:日历就是显示当前日历,并能查询前后的日历。首先要为日历创建一个表格布局,并 将其设置成布局尺寸不变,就是说,日历的布局不会随着窗口的拉大而改变大小。用 setGridVisible(true)将表格线设置为显示,这样就能在日历版面看到网格线,比较适合大家的 审美习惯。把日历表添加到表格布局中,这就算初步完成了日历表格的显示了。 当然了,总体模块除了以上三个主要部分,还有对整体的布局也是不可或缺的。因此,还 有一个重要的模块便是整体布局,整体布局时,分为水平布局和垂直布局,水平布局用来布 局圆盘时钟和电子时钟并行排列,组合之后,和日历的布局用垂直

6、布局完成。圆盘时钟和电 子时钟的单布局也是用垂直布局完成的。(3)具体类说明/*因为前面已经提到过同伴负责的部分,在这一块就不做说明*/ calender 类Calender类用来实现日历的显示,继承了 QT里的基类QWidget,定义了一个public成员变 量calender。,用来声明日历的构造函数。Private成员变量createPreviewGroupBox() 声明日历框中的函数。设计的两个函数:1. calender(),设计日历类,实现创建日历表格、创建表格布局对象,还有一些基本设置。2. createPreviewGroupBox(),设计日历表格框里的布局,将日历导入表格

7、布局中,再将表格 布局添加到窗口部件“日历查询”分组框中。 mainclock 类Mainclock 类用来实现总体布局,将圆盘时钟、电子时钟、日历有机结合起来,使得人机界 面友好美观。在继承基类情况下,定义了一个public成员变量mainclock.在源文件中进行详 细设计说明。首先是窗口类,设计窗口的标题,用库函数中的Qdate获取当前时间,以便程 序进行。然后,创建圆盘时钟对象,对圆盘时钟在总布局中的位置怎么显示进行具体设置, 并设置分组框标题。其次,设置当前日期(年月日),创建电子时钟对象,电子时钟和当前 日期设为垂直布局,他们组合后,与圆盘时钟的布局为水平布局。最后,创建日历对象,

8、将 日历添加到布局当中。详细设计见代码。这就算完成了总体布局了。 main类 主类,用来将所有的类组合起来,为总程序服务,控制整个桌面时钟的运行。#include #include #include #include #include #define pi 3.1415926LRESULT CALLBACK WndProc(HWND,UINT,WPARAM,LPARAM);int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, intnCmdShow)MSG Message;WNDCL

9、ASS WndClass;WndClass.cbClsExtra=0;WndClass.cbWndExtra=0;WndClass.hbrBackground=(HBRUSH)(GetStockObject(WHITE_BRUSH); WndClass.hCursor=LoadCursor(NULL,IDC_ARROW);WndClass.hIcon=LoadIcon(NULL,END);WndClass.hInstance=hInstance;WndClass.lpfnWndProc=WndProc;WndClass.lpszClassName=WinFill;WndClass.lpszMe

10、nuName=NULL;WndClass.style=CS_HREDRAW|CS_VREDRAW;RegisterClass(&WndClass);HWND hWnd;hWnd=CreateWindow(WinFill, /生成窗口时钟,WS_OVERLAPPEDWINDOW,CW_USEDEFAULT,0,CW_USEDEFAULT,0,NULL,NULL,hInstance,NULL);ShowWindow(hWnd,nCmdShow); /显示窗口UpdateWindow(hWnd);while(GetMessage(&Message,0,0,0) /消息循环 TranslateMess

11、age(&Message);DispatchMessage(&Message);returnMessage.wParam; int m=1,n=60;intp,q=12;/VOID WINAPI GetLocalTime(LPSYSTEMTIME lpSystemTime); /获取当前系统时间函LRESULT CALLBACK WndProc(HWND hwnd,UINTmessage,WPARAMwParam,LPARAMlParam) HDC hdc;PAINTSTRUCT ps;SYSTEMTIME lpSystemTime;HPEN hpen,HourPen,MinutePen,Se

12、condPen;switch(message)case WM_PAINT:GetLocalTime(&lpSystemTime); hdc=BeginPaint(hwnd,&ps);hpen=CreatePen(PS_SOLID,4,RGB(0,255,255); SelectObject(hdc,hpen);Ellipse(hdc,200,200,400,400);Ellipse(hdc,295,295,305,305);doubleRad,RadS;/RadS=2*pi*m/n; hpen=CreatePen(PS_SOLID,3,RGB(255,0,0);SelectObject(hdc

13、,hpen);for(p=0;p=q;p+)Rad=2*pi*p/q;MoveToEx(hdc,(int)(300+100*sin(Rad),(int)(300-100*cos(Rad),NULL); LineTo(hdc,(int)(300+80*sin(Rad),(int)(300-80*cos(Rad);m=(double)lpSystemTime.wSecond;RadS=2*pi*m/n;SecondPen=CreatePen(PS_SOLID,2,RGB(0,255,0);SelectObject(hdc,SecondPen);MoveToEx(hdc,300,300,NULL);

14、LineTo(hdc,(int)(300+80*sin(RadS),(int)(300-80*cos(RadS);m=(double)(lpSystemTime.wMinute*60.0+lpSystemTime.wSecond);RadS=2*pi*m/n;MinutePen=CreatePen(PS_SOLID,3,RGB(0,255,255);SelectObject(hdc,MinutePen);MoveToEx(hdc,300,300,NULL);LineTo(hdc,(int)(300+60*sin(RadS/60.0),(int)(300-60*cos(RadS/60.0);m=

15、(double)(lpSystemTime.wHour*3600.0+lpSystemTime.wMinute*60.0+lpSystemTime.wSecond );RadS=2*pi*m/n;HourPen=CreatePen(PS_SOLID,4,RGB(255,255,0);SelectObject(hdc,HourPen);MoveToEx(hdc,300,300,NULL);LineTo(hdc,(int)(300+40*sin(5*RadS/3600.0),(int)(300-40*cos(5*RadS/3600.0);if(1)Sleep(1000);InvalidateRect(hwnd,NULL,1);m+;EndPaint(hwnd,&ps);break;case WM_DESTROY:PostQuitMessage(0);break;default:return DefWindowProc(hwnd,messag

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号