C++MFC画图程序记事本程序计算器 程序 下载本文

内容发布更新时间 : 2024/6/26 12:32:34星期一 下面是文章的全部内容请认真阅读。

任务二开发一个画图程序

1

(1)软件目标:绘制点、直线、矩形、圆、椭圆,并能进行线宽设置。并设置显示学生信息菜单。

(2)软件设计

A.开发环境

基于VC++6.0的Microsoft Foundation Classes(即MFC)开发。MFC以类的形式封装了windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。在开发过程中运用到了windows的内建控件和组件的封装类。该程序运用了MFC中一个单文档工程进行实现。 B.基本操作流程

打开VC++6.0后点击MFCappwizard(exe),选择单文档创建工程。

打开resource工作空间,在menu中双击

架,设置菜单。菜单设置如下图:

打开主框

首先对菜单项“点”,进行响应。过程如下:

在菜单项“点”上右键,弹出右键菜单,选择“建立类向导”,在Object IDD中选择菜单项“点”的ID,即IDD_DIAN,在Class name中选择

,在Message中选择command后单击add function添加消

息响应函数,并选择edit code进行编辑。如下图所示:

6

为了能区分用户所要绘图的类型,在CHuangweiliang_2View类中添加成员变量m_nDrawType,并在构造函数中初始化:如下图所示

所以IDD_DIAN的消息响应COMMAND函数编写如下

对变量m_nDrawType进行赋值使得,m_nDrawType=1

当用户单击了“点”菜单项后,进入绘图状态,当用户在绘图区按下鼠标左键时画出一个点,所以需要对用户单击鼠标左键是箭头所在的位置坐标,所以又在CHuangweiliang_2View类中添加成员变量

的位置。构造函数中对m_ptOrigin进行初始化,其过程如下图

用来记录初始点

7

其中m_ptOrigin的变量类型为CString。

用void CHuangweiliang_2View::OnLButtonDown(UINT nFlags, CPoint point)函数对按下鼠标左键进行响应,同把得到的点的坐标信息保存在参变量point中,在函数体中把point的值赋给m_ptOrigin,以便绘图函数调用。实现过程如下

有了初始点后便可以画点了。

当松开鼠标左键时,表示用户已经确定了所要画点的位置,在CHuangweiliang_2View类添加成员函数用来响应用户松开左键。

在CHuangweiliang_2View类添加为

在该成员函数中用CClientDC 声明dc(this);,并调用CClientDC 中的SetPixel()成员函数,进行绘图。

使用条件语句对用户所绘画点的类型进行判断,当用户需要画点时m_nDrawType=1,所以用swtich case1 语句进行响应,如下图所示

用得到的初始点传给SetPixel()函数,进行画点,过程如下

8

函数中用RGB()函数制定点的颜色。画点完成。 当用户单击了“直线”菜单项时m_nDrawType的值更改,使得m_nDrawType=2。 由于画直线需要两个点,所以需要对松开鼠标左键的响应函数的到终点的坐标进行获取,终点坐标被保存在参数point中,所以可以直接调用。

绘画直线是需要调用CClientDC中的成员函数MoveTo()和LineTo()。起点的坐标值传递给MoveTo(),终点的坐标值传递给LineTo(),实现如下图

当用户需要绘画矩形时m_nDrawType=3,需要绘画圆时m_nDrawType=4,需要绘画椭圆时m_nDrawType=5,根据m_nDrawType的值switch语句进入不同的分支,调用CClientDC的成员函数。

当绘画矩形时,调用函数Rectangle(),参数为起点m_ptOrigin和终点point 当绘画圆时,调用函数Ellipse(),参数为起点X坐标m_ptOrigin.x,起点Y坐标m_ptOrigin.y,终点X坐标m_ptOrigin.x+100,终点Y坐标m_ptOrigin.y+100,此因为调用Ellipse()函数,为保证所画为原型,给定100的终点偏移量。

当需要绘画椭圆时调用函数Ellipse(),参数为起点m_ptOrigin,终点point。 其具体实现过程如下:

所绘画结果如图所示

9

从结果中可以看到,新画的会把原先画的进行覆盖,这是因为系统确实的画刷进行内部填充。现为改善这一缺点,重新设置画刷,添加代码如下

重新绘图结果

10