程序设计报告模板

程序设计实践

课题名称:__windows编程画图时钟______

学生姓名:__孙振超____________________

班 级:___2012211111_______________

班内序号:___24_______________________

学 号:___2012210326_______________

日 期:___2014_年_4_月_30 _号_______

1. 课题概述

1.1课题目标和主要内容

1. 熟悉在Visual studio 2010 环境下编辑、编译、调试和运行一个实际

窗口式应用程序的步骤和方法;

2. 能进行简单的windows 绘图程序设计;提高实际动手能力。

开发平台:windows32系统

主要工具:

Visual studio 2010

1.2系统的主要功能

windows 绘图程序设计

一. 画图

1. 画点: point()函数实现

2. 画直线: line()函数实现

3. 画矩形:

4. 画圆: rectangle()函数实现 circle()函数实现

5. 画椭圆: ellipse()函数实现

6. 画时钟: myclock()函数实现

二.bmp 文件处理

1. 打开bmp 文件 :open()函数实现;

2. 灰度处理: grey()函数实现;

3. 保存bmp 文件: save(HBITMAP hb, string &f) 函数实现

一. 画图功能

二.Bmp 文件处理功能

三. 菜单栏

时钟: 实现画方形时钟,功能

fig2: 实现自定义画图功能,一中的点,线等

Exit : 实现退出程序功能

打开文件: 打开本地*.bmp

另存为: 保存窗体中bmp 文件

灰度处理: 处理窗体中bmp 文件灰度

2. 系统设计

2.1 系统总体框架

系统框架图或层次逻辑图

设计思想

一.定义基类Shape ,为基本图类, 提供坐标,边框颜色及填充色信息,定义派

生类Point,Line,Circle,rectangle 设定相应参数,定义Message 接收消息

二.运用上述类,及句柄处理函数实现画图程序

三.处理BMP 文件

2.2 系统详细设计

[1] 模块划分图及描述

一.画图:

画笔宽度是通过成员整形变量width 控制,每一个宽度按钮对应不同的width

值。通过选择宽度按钮,即可选择不同的Width 值,创建画笔获得width 值后,就可画出不同的宽度。

调用相应类及函数实现画线,画点,矩形,椭圆等的功能。

2.3 关键算法分析

算法1:point()

[1] 算法功能

画点

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画点功能

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①.获取位置坐标

②.创建画笔信息并调用SelectObject()函数,把刚才创建的画笔

与绘图纸关联绘图

③.完成后删除画笔

注:画线line()功能思想类似,所以省略

算法2:ellipse(double x, double y, double ra, double rb,COLORREF

mColor,COLORREF fillColor)

[1] 算法功能

画椭圆

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画椭圆功能,并填充颜色

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①若填充色设置有效,则创建画刷并保存在oldbrush 中,

并通过SelectObject ()函数实现笔刷与绘图纸关联

②创建画笔并保存在oldpen 中,并通过SelectObject ()函数实

现笔刷与绘图纸关联

③画图操作和背景色填充操作

④删除画笔

算法3:_rectangle(double xfrom,double yfrom,double l,double ,COLORREF

mColor,COLORREF fillColor)

[1] 算法功能

画矩形

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画矩形功能,并填充颜

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①若填充色设置有效,则创建画刷并保存在oldbrush 中,并通过

SelectObject ()函数实现笔刷与绘图纸关联

②调用line ()函数画矩形四边,参数意义:(xfrom,yfrom)为矩形

中心点,l 为长,w 为宽

③背景色填充操作

算法4:getHBitmap()

[1] 算法功能

由窗口HDC 转向HBITMAP 消息

[2] 算法基本思想

通过建立内存和位图关系,使得句柄可处理位图

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

① 建立内存DC 和位图

② 获得内存DC 旧位图

③hdc 的内容写入到内存DC

④恢复内存DC 的旧位图,得到刚写入的hdc 内容

算法5:myOpen(HWND hwnd, HDC mainwin_hdc)

[1] 算法功能

打开bmp 文件至窗口

[2] 算法基本思想

通过将dc 位图放到内存dc ,通过处理内存dc ,即可实现对bmp 文件的处理

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①获取窗口客户取坐标

②获得位图DC 并将dc 位图放到内存dc

③绘制内存背景

④清除现有的句柄消息

算法6:mpaint()

[1] 算法功能

画图,圆,椭圆,线,点

[2] 算法基本思想

调用已经定义好的椭圆,线,点函数,实现画图功能

[3] 算法空间、时间复杂度分析

O (1)

[4] 代码逻辑(可用伪代码描述)

①将窗体设为背景色,白色

②调用ellipse(-7.0,1.0,2.0,1.0,RGB(0,0,255),RGB(255,0,255));画椭

③调用point ()函数画点

④调用 line(-20,0,-10,0,RGB(0,0,255))画线

⑤调用_rectangle(5,1,3,3,RGB(0,0,255),RGB(0,0,255))画矩形

算法7:open()

[1] 算法功能

打开bmp 文件

[2] 算法基本思想

通过句柄消息获取bmp 文件位置,大小等数据并打开相应bmp 文件

[3] 算法空间、时间复杂度分析

[4] 代码逻辑(可用伪代码描述)

①找到相应bmp 文件

②调用GetObject()函数,获得bitmap 信息到bmp 结构中

③调用GetBitmapBits()函数,将指定位图的位拷贝到缓冲区

算法8:grey()

[1] 算法功能

灰度处理

[2] 算法基本思想

通过句柄消息获取bmp 文件位置,大小等数据并打开相应bmp 文件

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①找到相应bmp 文件

②调用GetObject()函数,获得bitmap 信息到bmp 结构中

③调用GetBitmapBits()函数,将指定位图的位拷贝到缓冲区

算法9:save()

[1] 算法功能

保存bmp 文件

[2] 算法基本思想

将文件保存至本地

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①定义bmp 结构

②构建pbmi

③计算文件大小,获取位图信息

④写文件

算法10:myclock(GraphicWindows &cwin)

[1] 算法功能

画方形时钟

[2] 算法基本思想

[3] 算法空间、时间复杂度分析、

O(n)

[4] 代码逻辑(可用伪代码描述)

①存储秒和毫秒,调用_ftime()将日历时间转化为本地时间

②画表盘, 调用rectangle 类,设定长宽相等,背景色,边框色等值,画图 定义点类,画12个点

③画表针 ,句柄接收时针,分针,秒针不动点,实现时针,分针,秒针线段按时间正确顺序转动

程序运行结果分析

3. 总结

4.1课题的难点和关键点

由于以前并未接触windows 程序,运用是很不习惯,所以调试有困难。通过百度和询问同学老师,学到了很多相关知识,解决了编译中的错误。

3.2 本课题的评价

第11页

本课题切合实际,在学习能力范围内,是很好的课题。自己需要学的东西还有很多,对windows 变成只是初步了解,学到了一些调试程序的方法,会继续歇息相关知识,完善程序。如没有设定笔擦功能,可以尝试用背景色为白色,以鼠标选择笔擦功能为条件进行实现。

4.3心得体会

1.Windows 应用程序包括入口函数WinMain 和窗口函数WndProc 。

2. 绘图工具使用的一般步骤

1. 获取Win 系统库存画笔/或创建画笔/刷

2. 将画笔/刷选入设备环境,使用函数:SelectObject(hdc,hP/hBr)。删除画笔/刷,使用函数:DeleteObject(hP/hBr)。

3..Windows 应用程序变化万千,但消息机制和窗口过程却是Windows 应用程序的基石和骨架,贯穿于所有windows 应用程序之中。

这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。

4. 参考文献

[1]百度文库

第12页

程序设计实践

课题名称:__windows编程画图时钟______

学生姓名:__孙振超____________________

班 级:___2012211111_______________

班内序号:___24_______________________

学 号:___2012210326_______________

日 期:___2014_年_4_月_30 _号_______

1. 课题概述

1.1课题目标和主要内容

1. 熟悉在Visual studio 2010 环境下编辑、编译、调试和运行一个实际

窗口式应用程序的步骤和方法;

2. 能进行简单的windows 绘图程序设计;提高实际动手能力。

开发平台:windows32系统

主要工具:

Visual studio 2010

1.2系统的主要功能

windows 绘图程序设计

一. 画图

1. 画点: point()函数实现

2. 画直线: line()函数实现

3. 画矩形:

4. 画圆: rectangle()函数实现 circle()函数实现

5. 画椭圆: ellipse()函数实现

6. 画时钟: myclock()函数实现

二.bmp 文件处理

1. 打开bmp 文件 :open()函数实现;

2. 灰度处理: grey()函数实现;

3. 保存bmp 文件: save(HBITMAP hb, string &f) 函数实现

一. 画图功能

二.Bmp 文件处理功能

三. 菜单栏

时钟: 实现画方形时钟,功能

fig2: 实现自定义画图功能,一中的点,线等

Exit : 实现退出程序功能

打开文件: 打开本地*.bmp

另存为: 保存窗体中bmp 文件

灰度处理: 处理窗体中bmp 文件灰度

2. 系统设计

2.1 系统总体框架

系统框架图或层次逻辑图

设计思想

一.定义基类Shape ,为基本图类, 提供坐标,边框颜色及填充色信息,定义派

生类Point,Line,Circle,rectangle 设定相应参数,定义Message 接收消息

二.运用上述类,及句柄处理函数实现画图程序

三.处理BMP 文件

2.2 系统详细设计

[1] 模块划分图及描述

一.画图:

画笔宽度是通过成员整形变量width 控制,每一个宽度按钮对应不同的width

值。通过选择宽度按钮,即可选择不同的Width 值,创建画笔获得width 值后,就可画出不同的宽度。

调用相应类及函数实现画线,画点,矩形,椭圆等的功能。

2.3 关键算法分析

算法1:point()

[1] 算法功能

画点

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画点功能

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①.获取位置坐标

②.创建画笔信息并调用SelectObject()函数,把刚才创建的画笔

与绘图纸关联绘图

③.完成后删除画笔

注:画线line()功能思想类似,所以省略

算法2:ellipse(double x, double y, double ra, double rb,COLORREF

mColor,COLORREF fillColor)

[1] 算法功能

画椭圆

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画椭圆功能,并填充颜色

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①若填充色设置有效,则创建画刷并保存在oldbrush 中,

并通过SelectObject ()函数实现笔刷与绘图纸关联

②创建画笔并保存在oldpen 中,并通过SelectObject ()函数实

现笔刷与绘图纸关联

③画图操作和背景色填充操作

④删除画笔

算法3:_rectangle(double xfrom,double yfrom,double l,double ,COLORREF

mColor,COLORREF fillColor)

[1] 算法功能

画矩形

[2] 算法基本思想

通过获取用户定义坐标,画笔宽度,颜色等信息实现画矩形功能,并填充颜

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①若填充色设置有效,则创建画刷并保存在oldbrush 中,并通过

SelectObject ()函数实现笔刷与绘图纸关联

②调用line ()函数画矩形四边,参数意义:(xfrom,yfrom)为矩形

中心点,l 为长,w 为宽

③背景色填充操作

算法4:getHBitmap()

[1] 算法功能

由窗口HDC 转向HBITMAP 消息

[2] 算法基本思想

通过建立内存和位图关系,使得句柄可处理位图

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

① 建立内存DC 和位图

② 获得内存DC 旧位图

③hdc 的内容写入到内存DC

④恢复内存DC 的旧位图,得到刚写入的hdc 内容

算法5:myOpen(HWND hwnd, HDC mainwin_hdc)

[1] 算法功能

打开bmp 文件至窗口

[2] 算法基本思想

通过将dc 位图放到内存dc ,通过处理内存dc ,即可实现对bmp 文件的处理

[3] 算法空间、时间复杂度分析

O(1)

[4] 代码逻辑(可用伪代码描述)

①获取窗口客户取坐标

②获得位图DC 并将dc 位图放到内存dc

③绘制内存背景

④清除现有的句柄消息

算法6:mpaint()

[1] 算法功能

画图,圆,椭圆,线,点

[2] 算法基本思想

调用已经定义好的椭圆,线,点函数,实现画图功能

[3] 算法空间、时间复杂度分析

O (1)

[4] 代码逻辑(可用伪代码描述)

①将窗体设为背景色,白色

②调用ellipse(-7.0,1.0,2.0,1.0,RGB(0,0,255),RGB(255,0,255));画椭

③调用point ()函数画点

④调用 line(-20,0,-10,0,RGB(0,0,255))画线

⑤调用_rectangle(5,1,3,3,RGB(0,0,255),RGB(0,0,255))画矩形

算法7:open()

[1] 算法功能

打开bmp 文件

[2] 算法基本思想

通过句柄消息获取bmp 文件位置,大小等数据并打开相应bmp 文件

[3] 算法空间、时间复杂度分析

[4] 代码逻辑(可用伪代码描述)

①找到相应bmp 文件

②调用GetObject()函数,获得bitmap 信息到bmp 结构中

③调用GetBitmapBits()函数,将指定位图的位拷贝到缓冲区

算法8:grey()

[1] 算法功能

灰度处理

[2] 算法基本思想

通过句柄消息获取bmp 文件位置,大小等数据并打开相应bmp 文件

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①找到相应bmp 文件

②调用GetObject()函数,获得bitmap 信息到bmp 结构中

③调用GetBitmapBits()函数,将指定位图的位拷贝到缓冲区

算法9:save()

[1] 算法功能

保存bmp 文件

[2] 算法基本思想

将文件保存至本地

[3] 算法空间、时间复杂度分析

O(n)

[4] 代码逻辑(可用伪代码描述)

①定义bmp 结构

②构建pbmi

③计算文件大小,获取位图信息

④写文件

算法10:myclock(GraphicWindows &cwin)

[1] 算法功能

画方形时钟

[2] 算法基本思想

[3] 算法空间、时间复杂度分析、

O(n)

[4] 代码逻辑(可用伪代码描述)

①存储秒和毫秒,调用_ftime()将日历时间转化为本地时间

②画表盘, 调用rectangle 类,设定长宽相等,背景色,边框色等值,画图 定义点类,画12个点

③画表针 ,句柄接收时针,分针,秒针不动点,实现时针,分针,秒针线段按时间正确顺序转动

程序运行结果分析

3. 总结

4.1课题的难点和关键点

由于以前并未接触windows 程序,运用是很不习惯,所以调试有困难。通过百度和询问同学老师,学到了很多相关知识,解决了编译中的错误。

3.2 本课题的评价

第11页

本课题切合实际,在学习能力范围内,是很好的课题。自己需要学的东西还有很多,对windows 变成只是初步了解,学到了一些调试程序的方法,会继续歇息相关知识,完善程序。如没有设定笔擦功能,可以尝试用背景色为白色,以鼠标选择笔擦功能为条件进行实现。

4.3心得体会

1.Windows 应用程序包括入口函数WinMain 和窗口函数WndProc 。

2. 绘图工具使用的一般步骤

1. 获取Win 系统库存画笔/或创建画笔/刷

2. 将画笔/刷选入设备环境,使用函数:SelectObject(hdc,hP/hBr)。删除画笔/刷,使用函数:DeleteObject(hP/hBr)。

3..Windows 应用程序变化万千,但消息机制和窗口过程却是Windows 应用程序的基石和骨架,贯穿于所有windows 应用程序之中。

这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。

4. 参考文献

[1]百度文库

第12页


相关文章

  • 垃圾发电主厂房高支模施工方案
  • 目 录 一.编制依据 . ........................................................... 1 二.工程概况 . .................................... ...查看


  • 主体结构工程监理细则
  • 第二章 主体结构工程监理细则 2.1钢筋混凝土结构工程 监理工作参照规范及依据: ――<镦粗直螺纹钢筋接头>JGJ/T3057-1999 ――<钢筋机械连接通用技术规程>JGJ107-96 ――<钢筋焊接网混凝 ...查看


  • 土建工程资料报验程序
  • 工程资料报验程序 开 工 前 一.施工组织设计报审表(A2) 附:1.施工组织设计报批表 B1008 2.施工组织设计(要有编制.审批.盖公司技术章) 3.各技术工人班组长持证上岗登记表 B1048 开 工 工程开工/竣工报审表(A1) 附 ...查看


  • 建筑工程管理实习报告总结
  • 建筑工程管理实习报告总结 通过这几年对建筑施工技术与其他课程的学习,我初步掌握了关于施工方面的知识,但是由于书本上的知识和实际运用上的差距,有些内容并不是理解的很透彻.同时,由于技术的快速发展,有些书本上的知识已经落后于生产实际,甚至已经被 ...查看


  • Wsvtux土木工程施工实习报告
  • 生命是永恒不断的创造,因为在它内部蕴含着过剩的精力,它不断流溢,越出时间和空间的界限,它不停地追求,以形形色色的自我表现的形式表现出来. --泰戈尔 河北大学本科生实习报告表 学 院____建筑工程学院_____ 专 业____ 土木工程_ ...查看


  • 模板工程实训报告
  • 建筑工程技术模板实训 实习名称: 模板实训工程 指导教师: 刘 福 珍 实习学生:专业班级: 11建筑302班 所在小组学 号: [1**********]5 日 期: 汇总 模板实训报告 实训目的:通过一周是实训让我们对模板的概况.模板系 ...查看


  • 建筑工程施工技术实习报告
  • 建筑施工技术实习报告 一. 前言 生产实习是土木工程专业教学计划中必不可少的实践教学环节,它是所学理论知识与 工程实践的统一.在实习过程中,我以一个唐山矿业分公司主要通风机改造工程建设为实习场所,参加工程施工工作,顺利完成了十天的实习任务. ...查看


  • 土木工程(毕业)实习报告
  • 毕业实习报告 院: * * 学院 专业: 土木工程 班级: 学号: 学生姓名: 指导教师姓名: 实习日期: 2012年3月 作为一个土木工程专业毕业的本科生,毕业设计是大学阶段尤为重要的一个环节,它是对我们大学阶段所学知识的一次综合运用,不 ...查看


  • 实习总结:土木工程毕业实习报告3000字
  • 认识实习是房屋建筑学的重要组成部分,是我们将理论与实际紧密联系的重要环节.实习中,在专业技术人员和指导老师的帮助下,我们可以将课本上的理论知识和实践经验一一相互论证,对房屋建筑学知识有个良好的感性认知,了解本专业概况,为以后的专业知识的学习 ...查看


  • 工程档案管理规定模板
  • 工程档案管理规定 编写部门: 编写日期: 更新日期: 文档编码: 文档版本: 技术服务中心 2012年02月10日 ---- 年-- 月 --日 0.1 XXXXXXXXX公司 文档控制 修改记录 审阅记录 分发记录 目录 文档控制 ... ...查看


热门内容