实验九基于文档视图结构的MFC简单应用程序框架设计

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验九基于文档视图结构的MFC简单应用程序框架设计实验九基于文档/视图结构的MFC简单应用程序框架设计(4学时) ,实验目的,

1. 基本掌握Windows环境下MFC程序的开发流程和方法;

2. 基本掌握MFC中的文档/视图框架体系的简单编程方法;

,实验内容与步骤,

创建一个单文档的MFC工程,在其中实现简单的“涂鸦”操作。界面如图9-1

所示,实现如下功能:

图9-1、程序运行界面图

(1) 用户在视图窗口中按下鼠标左键,并拖动鼠标时,在窗口中即可进行“涂鸦”操

作,用户释放鼠标键时,绘图结束。

(2) 在文档类中设计一个数组,以保存视图窗口所绘制的线条坐标。使当窗口

重绘时,

能够重现已绘图形。

,MFC编程要点,

1. 视图类对象代表了应用程序的窗口客户区,是文档等信息的一个显示窗口,亦为用

户与程序间进行数据交互的桥梁。

2. 本实验中,一旦鼠标在窗口客户区内有所动作,则MFC将有关消息传递给视图类

对象进行处理。

,VC编程实现,

1、使用AppWizard创建一个单文档的MFC工程test9(在对话框“MFC AppWizard-Step

1”中选中“Single document”,各项设置均取默认值);

1

2、在视图类的头文件test9View.h中声明有关的成员变量:

protected:

bool m_bDraw; //绘图标识

HCURSOR m_Hcursor; //光标对象

CPoint m_pOld; //记录鼠标位置

在视图类CTest9View的构造函数中对上述成员变量进行初始化:

CTest9View::CTest9View()

{

// TODO: add construction code here

m_bDraw=FALSE;

//载入“十字”光标

m_Hcursor=AfxGetApp()->LoadStandardCursor(IDC_CROSS);

}

注:红色内容为VC自动生成的代码(下同)。

3、点击菜单项View->ClassWizard,使用ClassWizard为视图类CTest9View 添加消息WM_LBUTTONDOWN,定义消息响应函数,实现按下鼠标左键的相关绘图操作。ClassWizard操作如图9-2所示。有关代码为:

图9-2、使用ClassWizard为CTest9View添加消息WM_LBUTTONDOWN void CTest9View::OnLButtonDown(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default SetCursor(m_Hcursor); //使用新光标

m_bDraw=TRUE; //进入绘图状态

m_pOld=point;

SetCapture(); //捕捉鼠标

CRect rect;

GetClientRect(&rect); //获取客户窗口矩形区域

ClientToScreen(&rect); //转换为屏幕坐标

ClipCursor(rect); //限定鼠标不能移出客户窗口

CView::OnLButtonDown(nFlags, point);

2

}

同理,使用ClassWizard为视图类CTest9View添加消息WM_LMOUSEMOVE和LBUTTONUP,并定义消息响应函数,实现移动鼠标和释放鼠标左键的相关绘图操作。有关代码为:

void CTest9View::OnMouseMove(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default if(m_bDraw)

{

CClientDC dc(this); //获取客户窗口DC

dc.MoveTo(m_pOld); //绘图

dc.LineTo(point);

m_pOld=point;

}

CView::OnMouseMove(nFlags, point); }

void CTest9View::OnLButtonUp(UINT nFlags, CPoint point)

{

// TODO: Add your message handler code here and/or call default m_bDraw=FALSE; //取消绘图状态

ReleaseCapture(); //释放鼠标捕捉

ClipCursor(NULL); //取消鼠标区域的限制

CView::OnLButtonUp(nFlags, point); }

,思考题,

1. 设法将图形信息保存在文档对象中,使当窗口大小改变或覆盖时,可据此进行重绘。

2. 设法通过文档的序列化操作,将图形信息保存在指定文件中。当打开该文件时,显示相

关图形。

3

相关文档
最新文档