VC++程序设计实验报告
姓名:徐新 成绩:____
实验名称:简易的图形显示记录程序。
实验目的:熟悉并掌握VC++的MFCAppWizard程序的使用,自行并设计和实现一个简单的VC++程序,如能应用更好。
一.设计过程和算法描述:
1. 界面设计:我的VC++界面上存在的控件有:文件,编辑,帮助,查看,显示图形和颜色。其中,文件,编辑,帮助和查看控件为系统自动定义,显示图形和颜色控件为本人自行添加。
2. 下面介绍一下我的程序的主要控件的情况:
(1).图形显示:图形显示控件主要用于用户选择想要在窗口中显示的图形,其中包括:1.ID_YUAN圆形
2 .ID_JVXING矩形
3.ID_YJJVXING圆角矩形
4ID_SHANXING扇形
由于是显示图形,所以选好了图形之后只能显示事先定义好的图形,位置和颜色可以变(可以根据鼠标的位置和颜色选择控件修改),但是图形的大小等无法更改,这也是一个缺憾。
(2).颜色:颜色控件主要是用于用户选择所显示图形的边框颜色。 其中包括:1..ID_YANSE颜色选择
颜色选择用于选择用户需要现实的图形的边框颜色,如果用户在程序一开始没有指定颜色的话,默认为黑色。
以上为界面主要控件的描述。
二.算法设计
我设计这个程序的灵感来源于时间计数器(书后实验之一),主要用于实现已给出图形的绘图应用和记录以画图形的数量记载,再加上一些颜色和画笔的应用。
1..主要标识符:
这个程序包括的主要标识符有:
(1).左键响应函数:m_nLButton:用于响应鼠标左键按下消息;
,m_nLButton1,2,3,4:分别表示圆形,矩形,圆角矩形和扇形的数量;
(2).m_nLButton:用于启动计时器和弹出用于统计的MessageBox;
(3).画笔:p1,p2,p3,p4:用于画出边框(四种颜色的线,与边框对齐); Pen:用于在鼠标点击时显示图形;
(4).时间计数器Timer:定义为系统自动定义,但要调用。我的这个程序中时间计数器主要用于记录鼠标左键的点击次数,以便在MessageBox中显示;
(5).颜色变量color[i]:用于保存颜色,color[0]为黑色,color[1]为红色,color[2]为绿色,color[3]为蓝色;
(6).菜单中的标识符:ID_YUAN显示圆形,
ID_JVXING显示矩形
ID_YJJVXING显示圆角矩形
ID_SHANXING显示扇形
ID_YANSE调用颜色选择对话框
(7)变量:i,k:就是普通的变量-_-||||
(8)变量:ID:这个变量很重要,用于调用鼠标左键点击事件的图形显示消息响应,方法是使变量ID=ID_YUAN等,再用switch语句调用圆形,矩形,圆角矩形和扇形的画图语句,使得鼠标左键点击事件调用图形绘制函数,显示已有的图形;
2..主要代码段功能:
主要代码段都位于CXxxView中
(1) 四条边框:其实就是用画笔画四条线,要与窗口的边框相一致 先定义四个画笔:CPen p1,p2,p3,p4;
全都是实线,宽度为20,颜色不同:p1->CreatePen(PS_SOLID,20,color[i]); 紧贴四条边框:p1:MoveTo(10,0);LineTo(10,450);
P2:MoveTo(940,0);LineTo(940,450);
P3:MoveTo(30,10);LineTo(920,10);
P4:MoveTo(30,450);LineTo(920,450);
(2) 图形选择:
使用switch语句调用四个图形的ID地址,改变鼠标左键点击出现的图形,使用ID作为变量:switch(ID),当case分别为ID_YUAN, ID_JVXING, ID_YJJVXING, ID_SHANXING时,画出圆形,矩形,圆角矩形和扇形,并显示在窗口上;
(3) 记录用时间计数器:
先在鼠标左键点击函数中启用时间计数器:SetTimer(3,50,NULL); 再定义鼠标单击变量的变化:m_nLButton++;
当然了,在switch语句中,m_nLButton1,2,3,4也要自加来记录各个图形的数量。
到OnTimer中定义鼠标点击消息响应:If(nIDEvent=3);
先关闭时间计数器:KillTimer(nIDEvent);
在弹出MessageBox:MessageBox(str,"报告");
再设置弹出的消息:str.Formi("你已经画了%d图形!\n含有%d个圆形!\n含有%d个矩形!\n含有%d个圆角矩形!\n含有%d个扇
形!",m_nLButton,m_nLButton1,m_nLButton2,m_nLButton3,m_nLButton4);
(4) 颜色选择对话框:void CXxxView::OnYanse()
{
CColorDialog dlg;
dlg.m_cc.Flags|=CC_RGBINIT;
dlg.m_cc.rgbResult=YANSE;
if(IDOK==dlg.DoModal())
{YANSE=dlg.m_cc.rgbResult;}}
四.原代码清单(只列出我自己写的部分,系统自定定义的没写): CXxxView::CXxxView()
{
m_nLButton=0;
m_nLButton1=0; m_nLButton2=0; m_nLButton3=0; m_nLButton4=0; i=0; k=0; color[0]=RGB(0,0,0); color[1]=RGB(255,0,0); color[2]=RGB(0,255,0); color[3]=RGB(0,0,255);
}初始化变量。
void CXxxView::OnDraw(CDC* pDC)
{
CXxxDoc* pDoc = GetDocument();
ASSERT_VALID(pDoc); CPen p1,p2,p3,p4; p1.CreatePen(PS_SOLID,20,color[0]); CPen*pOldPen=pDC->SelectObject(&p1); pDC->MoveTo(10,0); pDC->LineTo(10,450); pDC->SelectObject(pOldPen); p2.CreatePen(PS_SOLID,20,color[1]); pDC->SelectObject(&p2); pDC->MoveTo(940,0); pDC->LineTo(940,450); pDC->SelectObject(pOldPen); p3.CreatePen(PS_SOLID,20,color[2]); pDC->SelectObject(&p3); pDC->MoveTo(30,10); pDC->LineTo(920,10); pDC->SelectObject(pOldPen); p4.CreatePen(PS_SOLID,20,color[3]); pDC->SelectObject(&p4); pDC->MoveTo(30,450); pDC->LineTo(920,450); pDC->SelectObject(pOldPen); SetTimer(1,500,NULL);
}用四个画笔p1,p2,p3,p4 话一个边框。
void CXxxView::OnLButtonDown(UINT nFlags, CPoint point)
{
CDC*pDC=GetDC();
CPen pen; pen.CreatePen(PS_SOLID,6,YANSE); pDC->SelectObject(&pen); m_nLButton++; SetTimer(2,50,NULL);
switch(ID)
{ case ID_YUAN:
pDC->RoundRect(point.x-50,point.y-50,point.x+50,point.y+50,100,100);m_nLButton1++;break;
case ID_JVXING:
pDC->Rectangle(point.x-60,point.y-30,point.x+60,point.y+30);m_nLButton2++;break;
caseID_YJJVXING:pDC->RoundRect(point.x-50,point.y-60,point.x+50,point.y+60,20,20);m_nLButton3++;break;
caseID_SHANXING:pDC->Pie(point.x-40,point.y-60,point.x+40,point.y+60,point.x-30,point.y-30,point.x+30,point.y+30);m_nLButton4++;break; }
void CXxxView::OnRButtonDown(UINT nFlags, CPoint point)
{SetTimer(3,50,NULL);
CView::OnRButtonDown(nFlags, point);} CView::OnLButtonDown(nFlags, point);}
与显示图形相对应,显示目标图形;
五、实验结果分析
打开界面,有一个边框,点击显示图形,选择想要的图形,在选择颜色,鼠标点击左键显示图形,再摁右键显示统计结果。
1遇到的但没有解决的问题:
(1)如果事先没有选择要画的图形而直接点击窗口,则右键点击也会显示有图形画出。
(2)在小窗口画的图形在窗口最大化后会消失,但是用画笔画的边框就不会消失。
2、遇到并解决的问题:
(1)、没写或忘写符号、。。。。。。。。
(2)、设置变量ID是老是提示“未声名的变量error C2065: 'ID' : undeclared identifier”,解决是在CView,和CDoc中都定义ID。
(3)、pen等定义时的错误
(4)、颜色对话框的设计实际上我不是很懂,是从同学那里考下来的 其实在编译过程中有许多问题,大体可以分为两类,一是自身的书写错误,二是输入的语句不符合VC++的规则。
六、感想
这个程序是我用了5天时间做的,开始是想做一个画图程序,但是由于自身能力有限和作画图程序的人太多,所以就该做这个了。我的灵感来源于书后的一个练习,就是鼠标点击次数统计,当时觉得有意思就当练习做了一下,后来一想,为什么不自己加一些东西呢?于
是我就用已学的知识,加上同学的帮助,做了这个小程序。其实,过程中有好几回想放弃,遇到了不会的问题都恨不得摔电脑,(值得一提的是我们寝室的人几乎是都在奋斗,为了解决一个问题,好几天都是2点才睡觉)但是每完成一个小的语句就会有一种高兴的心情,再加上同学的鼓励,于是就继续了。也许我的程序不是很好,不是很复杂,但确实是本人的一个作品,除了颜色对话框外没有任何抄袭,也算是一个小成就吧,因为毕竟是很用心的做了一件事,呵呵。结果如何请老师您自行定夺,但是完成这个作品我已经很高兴了,谢谢您!
第二篇:VC++实验报告1
北电力大学实验报告 华
华 北 电 力 大 学 实 验 报 告
第 1 页
第 2 页
第 3 页
第 4 页
第 5 页
第 6 页
第 7 页
第 8 页