已阅读5页,还剩11页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
程序设计实践 实验一 绘图程序 Draw 的实现之时钟改进 设 计 报 告 课题名称 时钟改进之星轨与时钟 学生姓名 班 级 班内序号 学 号 日 期 目录目录 一 课题概一 课题概 述述 二 系统设二 系统设 计计 三 程序设计亮点展三 程序设计亮点展 示示 四 四 运行结果分运行结果分 析析 五 遇到的难题与解决方五 遇到的难题与解决方 法法 六 总六 总 结结 参考文参考文 献献 一 课题概述 1 1 课题目标和主要内容 主要内容 根据所提供的时钟代码 新建派生类 利用 WINDOWS AP 设计和绘制图形 目标 以培养学生动手实践能力为目的 重点是在学习 C 程序设计和数据结构的基础上 使学生从实践中学习如何综合运用 C 和数据结构的相关知识解决实际应用中的问题 了 解程序设计的基本思想在具体实际应用中的体现 掌握分析问题 解决问题的方法 从而 提高学生的编程能力 达到编程熟练 会调试 代码书写规范的基本要求 具备简单应用 程序的设计 实现能力 平台 Visual studio 2013 API 平台 1 2 系统的主要功能 1 绘制菜单一 绘制星轨时钟 准确读出系统时间 时分秒钟都为新建图元类 代表星星 月亮 阳光 2 绘制菜单二 绘制成长星轨 可以看到随时间变化 成长 旋转的星星 2 系统设计 2 1 系统总体框架 2 2 系统详细设计 1 类关系图及描述 2 程序流程图及描述 指定窗口函数 消息处理入口 添加菜单资源初始化窗口 生成窗口并显示更新窗口 UpdateWindow hwnd 若 UpdateRegion 不空 则发送 WM PAINT 消息 while GetMessage 将虚拟键消息转换成字符消息 再送入消息队 列 DispatchMessage 分发消息 将队列中消息发送到窗口处理函数 窗口过程函数 绘图函数 2 3 关键算法分析 算法 1 窗口过程函数 1 算法功能 当按下指定菜单 窗口需要运行相应的处理函数 2 算法基本思想 在 API 里定义了一个函数为回调函数 当系统需要向窗口发送消息时 就会调用窗口给出的回 调函数 WindowProc 如果 WindowProc 函数不处理这个消息 就可以把它转向 DefWindowProc 函数来处理 这是系统的默认消息处理函数 3 源代码 LRESULT CALLBACK WndProc HWND UINT WPARAM LPARAM 函数 WndProc HWND UINT WPARAM LPARAM 目的 处理主窗口的消息 WM COMMAND 处理应用程序菜单 WM PAINT 绘制主窗口 WM DESTROY 发送退出消息并返回 LRESULT CALLBACK WndProc HWND hWnd UINT message WPARAM wParam LPARAM lParam static int menuId 0 int wmId wmEvent PAINTSTRUCT ps HDC hdc HDC mainwin hdc switch message case WM CREATE SetTimer hWnd 1 1000 NULL break case WM TIMER InvalidateRect hWnd NULL TRUE break case WM COMMAND wmId LOWORD wParam wmEvent HIWORD wParam switch wmId case IDM ABOUT DialogBox hInst MAKEINTRESOURCE IDD ABOUTBOX hWnd About break case IDM FIG1 menuId IDM FIG1 InvalidateRect hWnd NULL TRUE break case IDM FIG2 menuId IDM FIG2 InvalidateRect hWnd NULL TRUE break case IDM FIG3 menuId IDM FIG3 InvalidateRect hWnd NULL TRUE break case IDM EXIT DestroyWindow hWnd break default return DefWindowProc hWnd message wParam lParam break case WM PAINT mainwin hdc BeginPaint hWnd if menuId cwin open hWnd mainwin hdc ccc win main menuId EndPaint hWnd break case WM DESTROY KillTimer hWnd 1 PostQuitMessage 0 break default return DefWindowProc hWnd message wParam lParam return 0 算法 2 绘图函数 以画 ellipse 为例 1 算法功能 运行函数时 绘出相应图形 2 算法基本思想 设置double x double y double ra double rb COLORREF mColor等变量 当运行函数时根 据相应参数画出图形 在这里我新建了一个重载函数和类 多定义了在这里我新建了一个重载函数和类 多定义了 COLORREF icolor 变量 变量 oColor 指的指的 是画圆的笔的颜色 而是画圆的笔的颜色 而 icolor 则是填充圆的画刷的颜色 通过在则是填充圆的画刷的颜色 通过在 void GraphicWindow ellipse 中新建笔和刷子用来绘图 最后将比和刷子的颜色恢复成预制 中新建笔和刷子用来绘图 最后将比和刷子的颜色恢复成预制 删除新建笔刷 删除新建笔刷 如下图所示 如下图所示 3 源代码 Plots a ellipse void ellipse double x double y double ra double rb COLORREF mColor void ellipse double x double y double ra double rb COLORREF oColor COLORREF icolor void GraphicWindow ellipse double x double y double ra double rb COLORREF oColor COLORREF icolor HPEN save pen HPEN SelectObject hdc CreatePen PS SOLID 1 oColor HBRUSH brush CreateSolidBrush icolor HBRUSH save brush HBRUSH SelectObject hdc brush Ellipse hdc user to disp x x ra user to disp y y rb user to disp x x ra user to disp y y rb SelectObject hdc save brush DeleteObject brush SelectObject hdc save pen GraphicWindow 深紫罗兰色 clkPlate3 SetColoro RGB 148 0 211 cwin clkPlate3 其他 使用了尽量减少值传递 多用引用来传递参数 有助于提高代码简洁和效率的方法 3 程序设计亮点展示程序设计亮点展示 亮点一 新建三个图元类亮点一 新建三个图元类 starsline moonmline 以及以及 sunhline 来画来画 新的表针新的表针 新建三个图元类 starsline moonmline 以及 sunhline 来画新的表针 表针端头都有随之转动 的特殊图像 如图所示 sunhline Starsline moonmline 以 starsline 为例 实现代码如下 Plots a starsline void Starsline double xfrom double yfrom double xto double yto COLORREF mColor class starsline public Shape public starsline starsline Point p1 Point p2 Point get start const Point get end const COLORREF get color const virtual void move double dx double dy virtual void SetColor COLORREF mColor private Point from Point to COLORREF color starsline starsline starsline starsline Point p1 Point p2 from p1 to p2 Point starsline get start const return from Point starsline get end const return to COLORREF starsline get color const return color void starsline move double dx double dy from move dx dy to move dx dy void starsline SetColor COLORREF mColor color mColor void GraphicWindow Starsline double xfrom double yfrom double xto double yto COLORREF mColor double c yfrom yto sqrt xfrom xto xfrom xto yfrom yto yfrom yto double p acos c double x 6 y 6 for int i 0 i 6 i x i 0 7 sin p i PI 3 xto 利用弧度定义六芒星的六个顶点 y i 0 7 cos p i PI 3 yto SelectObject hdc CreatePen PS SOLID 1 mColor 设置画笔 用笔分别连接六芒星对 应顶点画出星星 MoveToEx hdc user to disp x xfrom user to disp y yfrom 0 LineTo hdc user to disp x xto user to disp y yto MoveToEx hdc user to disp x x 0 user to disp y y 0 0 LineTo hdc user to disp x x 2 user to disp y y 2 MoveToEx hdc user to disp x x 2 user to disp y y 2 0 LineTo hdc user to disp x x 4 user to disp y y 4 MoveToEx hdc user to disp x x 4 user to disp y y 4 0 LineTo hdc user to disp x x 0 user to disp y y 0 MoveToEx hdc user to disp x x 1 user to disp y y 1 0 LineTo hdc user to disp x x 3 user to disp y y 3 MoveToEx hdc user to disp x x 3 user to disp y y 3 0 LineTo hdc user to disp x x 5 user to disp y y 5 MoveToEx hdc user to disp x x 5 user to disp y y 5 0 LineTo hdc user to disp x x 1 user to disp y y 1 GraphicWindow return this starsline sLine org sEnd sLine SetColor RGB 255 255 255 moonmline mLine org mEnd sunhline hLine org hEnd hLine SetColor RGB 255 255 255 cwin hLine mLine sLine 亮点二 利用弧度绘制六芒星亮点二 利用弧度绘制六芒星 通过一个循环找到围绕指针端点等间隔分布的六个点 再调用系统函数连线 围绕夜空转动的五彩星星则是调用了系统时间来改变星星的位置和色彩 实现代码如下 double c yfrom yto sqrt xfrom xto xfrom xto yfrom yto yfrom yto double p acos c double x 4 y 4 for int i 0 i 4 i x i 0 7 sin p i PI 2 xto 利用弧度定义 y i 0 7 cos p i PI 2 yto MoveToEx hdc user to disp x x 0 user to disp y y 0 0 LineTo hdc user to disp x x 1 user to disp y y 1 MoveToEx hdc user to disp x x 1 user to disp y y 1 0 LineTo hdc user to disp x x 2 user to disp y y 2 MoveToEx hdc user to disp x x 2 user to disp y y 2 0 LineTo hdc user to disp x x 3 user to disp y y 3 MoveToEx hdc user to disp x x 3 user to disp y y 3 0 LineTo hdc user to disp x x 0 user to disp y y 0 MoveToEx hdc user to disp x x 1 user to disp y y 1 0 LineTo hdc user to disp x x 3 user to disp y y 3 MoveToEx hdc user to disp x x 0 user to disp y y 0 0 LineTo hdc user to disp x x 2 user to disp y y 2 亮点三 利用系统时间绘制围绕表盘缩进的星光亮点三 利用系统时间绘制围绕表盘缩进的星光 调用系统时间 利用 point 类在表盘里面画星轨 radius 6 local tm sec 6 for i 0 iSetColor RGB 255 255 255 cwin mPoint 亮点四 利用系统时间和亮点四 利用系统时间和 Point Line Starsline 类绘制变化的星轨类绘制变化的星轨 画星星 Point org 0 0 double x 8 y 8 double l l 9 local tm sec 9 x 0 0 y 0 l for int i 1 i 8 i x i l sin PI 2 i PI 4 利用弧度定义六芒星的六个顶点 y i l cos PI 2 i PI 4 其中 l 是随时间以 9 为周期变化的数值 然后再调用相应的类绘图 四 四 运行结果分析运行结果分析 运行效果 XQY 的绘图设计菜单栏一 月黑见渔灯 孤光一点萤 星轨时钟 时钟调用了系统时间 分针秒针时针分别指向对应的位置 秒针尽头一颗六芒星六芒星随之转动 分针尽头一轮弯月弯月随之转动 时针尽头则是一个小小的铅垂铅垂牵引着它 同时 在渐变的紫渐变的紫 色调表盘色调表盘上有均匀分布的星光星光 随时间一圈一圈闪现随时间一圈一圈闪现在不同颜色的表盘上 浅紫色的夜空 背景下 还有一颗颜色按七原色赤橙黄绿青蓝紫赤橙黄绿青蓝紫变化的星星围绕表盘转动围
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026甘肃甘南州玛曲县河曲马场景区职业经理人及管理团队招聘3人备考题库及一套答案详解
- 2026江苏连云港市赣榆区区属国企对外招聘工作人员39人备考题库及参考答案详解一套
- 2026太极计算机春季校园招聘备考题库完整答案详解
- 2026年小学综合实践教师资格证笔试模拟试题
- 2026年氧化工艺笔试重点考点解析
- 2026年消防疏散知识讲解
- 大专考试数学试题及答案
- 2026年安全责任制考核标准
- 2025-2026学年七台河市中考试题猜想数学试卷(含答案解析)
- 医院自助服务方案
- 2025河南省安全员-C证考试(专职安全员)题库附答案
- 森林防火工程技术标准
- GB/T 19701.1-2024外科植入物超高分子量聚乙烯第1部分:粉料
- 代谢综合征与运动
- 浙江省居住建筑节能设计标准
- 2024届上海市杨浦区六年级下学期小升初真题数学试卷含解析
- 24春国家开放大学《客户关系管理》形考作业1-4参考答案
- 矿山系统机电技术人员考试题库
- GB/T 43232-2023紧固件轴向应力超声测量方法
- 单层厂房抗震设计
- 公路水运工程施工企业(主要负责人和安全生产管理人员)考核大纲及模拟题库
评论
0/150
提交评论