西 安 邮 电 大 学
课内实验
实验名称:MFC曲线绘制实验报告
专业名称: 计算机科学与技术
班 级: 计科1202班
学生姓名: 李和娜
学号(8位): 04121179(32)
指导教师: 王博
实验日期: 2014年5月16日
一. 实验目的及实验环境
1.实验目的:在Visual C++6.0的环境中创建一个工程实现线的绘制
(1)熟悉MFC开发环境,了解窗体编程的概念和方法
(2)使用MFC中单文档模式开发程序(SDI)
(3)了解文件、对象的序列化,实现文件的持久化存储
2.实验环境:Visual C++ 6.0
二. 实验内容
(1).工程的创建。使用MFC AppWizard创建一个基于对话框的工程;
(2).界面设计。使用控件工具栏为对话框添加所需控件,并设置控件属性;使用界面布局工具栏调整控件布局,完成应用程序界面设计。
(3).创建对话框成员变量和成员函数。使用ClassWizard为控件添加相关联的对话框成员变量和消息相应函数;在Workspace窗口的ClassView页中,根据需要为对话框添加其他成员变量和成员函数。
(4).编写代码。
(5).编译、调试程序;运行程序,并对程序功能进行测试。
三.
设计
打开Visual C++6.0,新建一个工程
1.使用控件工具栏为对话框添加所需控件,并设置控件属性;使用界面布局工具栏调整控件布局,完成应用程序界面设计。
2.创建对话框成员变量和成员函数,编写代码。
3.编译、调试程序;运行程序,并对程序功能进行测试。
四.测试数据及运行结果
五.
1.实验过程中遇到的问
及解决办法;
通过上次几节实验课,渐渐熟悉了VB的实验环境,接下来对此VC的操作有了一定的熟悉,但是对于老师布置的任务还是无从下手,于是就到图书馆查找资料,找到一些有关程序方面的,可是这点小进展远远不够,于是进一步在网上查找,最后通过多次上机的摸索以及老师的讲解,渐渐深入,有了一定的能力,但实验还是会遇到问题,写代码的过程中有点难度,不过老师很有耐心,仔细为大家答疑解惑。通过老师的讲解,渐渐深入,对程序的理解更有了一定的能力,对界面的相关调整不是很熟悉,还有代码敲完执行程序时达不到预期的效果。最后通过问老师以及同学顺利完成简单的VC程序。但是对于把结果做的完整,美观还得进一步操作及其修改。
2.对设计及调试过程的心得体会。
在设计程序的过程中我感受到,既要学会VC程序的执行
,又要熟悉和掌握VC的操作界面、面向对象程序设计的特点,要特别重视数据类型的定义、表达式、函数及常用控制的属性、功能和使用。还了解VC过程中的设计理念,集成开发环境,工程管理,窗体和常用控制,运算符,内部函数,基本语句的了解,数组概念基本操作。
通过这次课程设计,让我更加了解了计算机运行程序,了解了计算机运行的语言,并能根据自己的需要编写简单程序,极大地减少了工作量提高了工作效率,使计算机更加人性化,使我们更加充分的运用计算机,为以后工作提供了方便。
对VC编程多了更多的了解,它不仅可以实现简单的程序运算,而且还可以开发可视化的界面,设计漂亮的界面,多实践才能有更多的了解,获取更多的知识。
最后一点的体会是,面对困难的时候,如果绕不过去就要努力克服,可以求助老师,同学,查阅资料,不要轻易放弃任何方法。
附录:源代码:
CDrawDoc.cpp
IMPLEMENT_DYNCREATE(CDrawDoc, CDocument)
BEGIN_MESSAGE_MAP(CDrawDoc, CDocument)
//{{AFX_MSG_MAP(CDrawDoc)
// NOTE - the ClassWizard will add and remove mapping macros here.
// DO NOT EDIT what you see in these blocks of generated code!
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
CDrawDoc::CDrawDoc()
{
}
CDrawDoc::~CDrawDoc()
{
}
BOOL CDrawDoc::OnNewDocument()
{
if (!CDocument::OnNewDocument())
return FALSE;
return TRUE;
}
void CDrawDoc::Serialize(CArchive& ar)
{
if (ar.IsStoring())
{
m_LineArray.Serialize(ar);
}
else
{
m_LineArray.Serialize(ar);
}
}
void CDrawDoc::AssertValid() const
{
CDocument::AssertValid();
}
void CDrawDoc::Dump(CDumpContext& dc) const
{
CDocument::Dump(dc);
}
CLine *CDrawDoc::GetLine(int nIndex)
{
if(nIndex<0||nIndex>m_LineArray.GetUpperBound())
{
return NULL;
}
return m_LineArray.GetAt(nIndex);
}
void CDrawDoc::AddLine(CPoint pt1,CPoint pt2)
{
CLine *pLine = new CLine(pt1,pt2);
m_LineArray.Add(pLine);
SetModifiedFlag();
}
int CDrawDoc::GetNumLines()
{
return m_LineArray.GetSize();
}
void CDrawDoc::DeleteContents()
{
int nIndex = GetNumLines();
while(nIndex--)
{
delete m_LineArray.GetAt(nIndex);
}
m_LineArray.RemoveAll();
CDocument::DeleteContents();
}
CDrawView.cpp
IMPLEMENT_DYNCREATE(CDrawView, CView)
BEGIN_MESSAGE_MAP(CDrawView, CView)
//{{AFX_MSG_MAP(CDrawView)
ON_WM_LBUTTONUP()
ON_WM_LBUTTONDOWN()
ON_WM_MOUSEMOVE()
//}}AFX_MSG_MAP
// Standard printing commands
ON_COMMAND(ID_FILE_PRINT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_DIRECT, CView::OnFilePrint)
ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView::OnFilePrintPreview)
END_MESSAGE_MAP()
CDrawView::CDrawView()
{ //构造函数中初始化拖拽标记,设置十字光标
m_bDragging = false;//初始化拖拽标记
m_hCross = AfxGetApp()->LoadStandardCursor(IDC_CROSS);
}
CDrawView::~CDrawView()
{
}
BOOL CDrawView::PreCreateWindow(CREATESTRUCT& cs)
{
return CView::PreCreateWindow(cs);
}
void CDrawView::OnDraw(CDC* pDC)
{
CDrawDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
CClientDC dc(this);
// TODO: add draw code for native data here
int nIndex = pDoc->GetNumLines();
TRACE("nIndex1=%d\n",nIndex);
while(nIndex--)
{ TRACE("nIndex2=%d\n",nIndex);
pDoc->GetLine(nIndex)->DrawLine(pDC);
CPoint pt1 = pDoc->GetLine(nIndex)->GetPt1();
CPoint pt2 = pDoc->GetLine(nIndex)->GetPt2();
dc.MoveTo(pt1);
dc.LineTo(pt2);}}
BOOL CDrawView::OnPreparePrinting(CPrintInfo* pInfo)
{return DoPreparePrinting(pInfo);
}
void CDrawView::OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/){}
void CDrawView::OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)
{ // TODO: add cleanup after printing
}
#ifdef _DEBUG
void CDrawView::AssertValid() const
{
CView::AssertValid();
}
void CDrawView::Dump(CDumpContext& dc) const
{
CView::Dump(dc);
}
CDrawDoc* CDrawView::GetDocument() // non-debug version is inline
{
ASSERT(m_pDocument->IsKindOf(RUNTIME_CLASS(CDrawDoc)));
return (CDrawDoc*)m_pDocument;
}
#endif //_DEBUG
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
if(m_bDragging)
{
m_bDragging = FALSE;
ReleaseCapture();
}
}
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)