浙江大学。课程**。
(2013-2014学年冬学期)
**题目:基于visual studio 2008简单画图程序设计。
课程名称: visual c
任课教师。学号。
姓名。完成日期。
基于visual studio 2008简单画图程序设计。
本设计以visual studio 2008为平台来设计简单画图程序,参考左飞、万晋森、刘航的《visual c ++数字图像处理开发入门与编程实践》书中实例为基础,进行改进与编译,弄清程序每部分作用和原理,体会mfc编程的经过,并为以后独立完成设计打下很好的基础。将简单画图程序命名为easydraw,easydraw是一个基于mfc多文档的应用程序,同时利用了无模式对话框实现了绘图工具箱的功能。easydraw拥有以下功能:
1) 直线、矩形、椭圆的绘制。
2) 可以更改绘制线条的类型、宽度、颜色。
图1 easydraw的界面示意图。
1. 概要设计。
1.1创建新项目。
启动visual studio 2008,选择文件→新建→项目命令。在出现的“新建项目”对话框中选择“mfc应用程序”模板,输入名称easydraw,然后点击确定,在”mfc应用程序向导”对话框直接单击“确定”,使用默认配置生成项目。
1.2图形设计。
本程序只需要实现直线、矩形、椭圆的绘制。仔细分析之后,发现这3种结构都有共同的特点:只需要用两个点,就可以确定图像。所以对于每个图像,程序只需要保存左上方和右下方的点。
针对本设计的规模,为了简化编程,将3类图形采用了统一的结构体easygraphics进行描述。本程序使用结构体而不使用类的原因在于结构体默认是public的访问权限。easygraphics结构体具体定义如下:
/结构体组成部分。
#pragma once
/ 图形类型定义。
#define eg_line 0 //直线。
#define eg_rect 1 //矩形。
#define eg_circle 2 //椭圆。
struct easygraphics
uint m_ntype图形类型
colorref m_clrcolor图形颜色。
uint m_nlinewidth; /图形线条宽度。
intm_nlinetype图形线条类型。
cpoint m_pttopleft图形左上点。
cpoint m_ptbottomright; /图形右下点。
1.3绘制工具箱。
绘制工具箱其实就是一个无模式对话框,所以需要先完成对话框的设计。
先在项目中添加一个对话框资源,改名为idd_drawtools。为使对话框看起来像工具箱,需要将“tool window”属性改为true。然后为该对话框资源创建对应的类cdrawtooldlg。
绘制工具箱的界面设计如图2所示,绘制工具箱资源关系如表1所示,部分控件需要修改的属性如表2所示。
图2 绘制工具箱的界面设计。
表1 绘制工具箱资源与变量关系。
下面是一些控件的属性设置:
表2 部分控件需要修改的属性。
1.4绘制工具栏和菜单。
1)添加“工具”菜单项。
由于“工具”菜单用于绘制文档,所以只需在资源视图中的”menu”中idr_easydrawtype中添加即可,图3所示。
图3 “工具”菜单项的设计。
具体菜单属性如表3所示:
2)添加绘图工具栏按钮。
打开资源视图,展开“*******”后,在原有的工具栏后添加3个新的按钮,如图4所示。
图4 工具栏按钮的设计。
新添加的按钮的id应该和“工具”菜单下的命令id一一对应,所以按钮的id应该分别改为id_tool_line、id_tool_rect、id_tool_circle。
程序的概要设计到这里已经全部完成,下面正式开始编码。
2.实例编码。
程序主要由两大部分完成所有绘制功能:一个是绘图工具箱对话框,一个是视图类。下面先将绘图工具箱对话框cdrawtooldlg类的**列出:
的**清单:
#pragma once
#include ""
/ cdrawtooldlg 对话框。
class cdrawtooldlg : public cdialog
declare_message_map()
declare_dynamic(cdrawtooldlg)
public:
bool m_bshow; /是否处在“显示”状态。
// 控件变量。
cstatic m_stcolor颜色框。
cstatic m_stprev预览框。
cdrawtooldlg(cwnd* pparent = null); 构造函数。
virtual ~cdrawtooldlg();
//获取直线类型。
int getlinetype() const
//获取直线宽度。
uint getlinewidth() const
//获取直线颜色。
colorref getlinecolor() const
void updatedialog(void绘制对话框中颜色框和预览框。
virtual bool oninitdialog对话框的初始化。
// 消息响应函数。
afx_msg void onbnclickedradiosolid单击直线类型的“正常”的响应函数。
afx_msg void onbnclickedradiodash单击直线类型的“虚线”的响应函数。
afx_msg void onbnclickedradiodot单击直线类型的“点线”的响应函数。
afx_msg void onbnclickedradiodashdot单击直线类型的“虚点线1”的响应函数。
afx_msg void onbnclickedradiodashdotdot单击直线类型的“虚点线2”的响应函数。
afx_msg void onbnclickedchangecolor改变颜色”按钮的响应函数。
afx_msg void onenchangeeditlinewidth线宽改变的响应函数。
afx_msg void onpaint绘制对话框。
enum virtual void oncancel();
virtual void dodataexchange(cdataexchange* pdx); ddx/ddv 支持。
virtual void postncdestroy();
private:
intm_nlinetype; /直线类型。
colorref m_clrcolor直线颜色。
uint m_nlinewidth; /直线宽度。
的**清单:
/ :实现文件。
#include ""
#include ""
#include ""
/ cdrawtooldlg 对话框。
implement_dynamic(cdrawtooldlg, cdialog)
/建立构造函数。
cdrawtooldlg::cdrawtooldlg(cwnd* pparent /*null*/)
: cdialog(cdrawtooldlg::idd, pparent), m_nlinetype(0), m_nlinewidth(1), m_bshow(true)
m_clrcolor = rgb(0, 0, 0);
cdrawtooldlg::~cdrawtooldlg()
void cdrawtooldlg::dodataexchange(cdataexchange* pdx)
cdialog::dodataexchange(pdx);
ddx_control(pdx, idc_static_color, m_stcolor);
ddx_control(pdx, idc_static_prev, m_stprev);
ddx_text(pdx, idc_edit_line_width, m_nlinewidth);
C 课程大作业
文章关键词检索及匹配度计算。xxxx学院。学号 1234567 姓名 刘黄书。指导教师 猪哥亮。一 课题介绍 本课题是一次对编程知识的应用。通过对所学内容的应用,解决对文章关键字的检索及匹配度的计算这一实际应用。难点在于对文章中单词的提取与比较和对于匹配度算法的设计。本课题有如下需求 1 对关键字的...
c 课程设计作业
学号 201205527 姓名 刘新雯。学院 数理学院。专业 统计学。一 设计名称 计算器。二 基本功能 本课程设计是在基于对话框的应用程序中模拟一个计算器,本计算器可以进行十进制下的四则运算 加 减 乘 除 和四则混合运算,可以把十进制转化为二进制或十六进制,可以进行一些常用的函数运算 比如sin...
c语言课程设计作业
课程设计。设计一个学生成绩管理系统,该系统记录了全班同学语。文 数学 英语3门课程的成绩,并对成绩进行管理。主要功能如下 1 具备对成绩的管理功能 添加 删除 排序 2 具备对课程成绩的统计功能 最高分,最低分,平均分,及格率等 3 具备按学号 姓名 或课程名查询成绩的功能。4 具备将学生成绩写入文...