中南大学数学院大三年级面向对象实验报告.docx
- 文档编号:2783183
- 上传时间:2022-11-15
- 格式:DOCX
- 页数:20
- 大小:552.76KB
中南大学数学院大三年级面向对象实验报告.docx
《中南大学数学院大三年级面向对象实验报告.docx》由会员分享,可在线阅读,更多相关《中南大学数学院大三年级面向对象实验报告.docx(20页珍藏版)》请在冰豆网上搜索。
中南大学数学院大三年级面向对象实验报告
面向对象程序设计
学号
姓名
学院
班级
面向对象程序设计实验
一.实验项目名称:
简单画图程序
二.实验目的:
1)在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
2)选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
3)增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。
三.实验设计思路:
1)对需要用到的变量进行初始化。
2)选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
3)鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
四.实验软件设计
4.1设计步骤
1)创建单文档
创建一个MFCAppWizard[exe]工程,命名为“yinshuyan”,如图1所示,并创建单文档,如图2所示。
创建成功后,系统自动生成相应的类,如图3所示。
图2创建工程
图3创建单文档
图4生成类
2)编辑菜单
添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。
图5添加菜单项
图6设置菜单ID
表1菜单项对应ID
菜单名
ID
菜单名
ID
直线
ID_LINE
线宽1
ID_W1
矩形
ID_RECT
线宽2
ID_W2
椭圆
ID_ELLIPSE
线宽3
ID_W3
颜色
ID_COLOR
线宽4
ID_W4
填充色
ID_FILLCOLOR
线宽5
ID_W5
建立类向导,在视图类CyinshuyanView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图6所示。
图7建立类向导
3)创建工具栏
在插入处选择资源,新建工具栏,如图7所示;
图8新建工具栏
在工具栏上添加相应的按钮,在属性处更改其ID,如图8所示。
图9编辑工具栏
4)在相应消息函数处添加代码,实现其功能
建立类向导,在视图类CyinshuyanView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码,如图9所示。
图10添加WM_PAINT消息
4.2界面设计
各控件名称,类型,属性及相关变量如表2所示。
表2界面控件表
控件名称
控件类型
属性
相关变量
绘图
下拉式菜单
无
无
直线
菜单项
工具栏按钮
ID_LINE
intshape
矩形
菜单项
工具栏按钮
ID_RECT
intshape
续表2界面控件表
控件名称
控件类型
属性
相关变量
椭圆
菜单项
工具栏按钮
ID_ELLIPSE
intshape
线宽
弹出式菜单
无
intw
颜色(线色)
菜单项
工具栏按钮
ID_COLOR
COLORREFm_nColor
填充色
菜单项
工具栏按钮
ID_FILLCOLOR
COLORREFm_fColor
4.3关键功能实现
1)选择要绘制的图形
在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:
当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape=2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。
2)改变线宽
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w,m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。
选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。
若不选择线宽值,则w=1(即默认线宽值为1)。
3)改变线色
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w,m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。
选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。
若不选择颜色,则默认(线)颜色为黑色。
4)改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。
选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。
若不选择颜色,则默认填充色为黑色。
5)绘制图形
鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。
五.实验结论与心得体会
这次课程设计我成功的完成了。
通过本次课程设计,我完成了用移动鼠标对直线,矩形,椭圆的简单绘制工具的的制作,其中完成了绘图形状的选择,画图线宽、线色以及图形填充色的设置。
基于平时课外上机实验的练习,对菜单的创建,COMMAND消息处理函数和UPDATE_COMMAND_UI消息函数的添加过程比较熟练,这部分还算简单。
难的是代码的添加,对绘制图形的程序有大概的思路,但具体编写时变量的运用以及函数的调用设置。
这次实验中关键就是确定画图起点及终点坐标,因为是用鼠标绘制图形,所以需用函数来捕获鼠标当前所在位置的坐标,因此我设置了OnLButtonDown()函数来捕获起点坐标,OnMouseMove()函数来捕获鼠标移动是的当前位置坐标,OnLButtonUp()函数来捕获终点坐标。
而绘制图形使用的函数是OnPaint(),将图形的起点和终点坐标和鼠标的位置坐标相联系后就能用鼠标来绘制图形了,所以在它们之间用opoint和cpoint两变量实现链接。
另外我觉得将绘图语句集中在OnPaint()函数中,然后其他函数来调用OnPaint()函数,这样不容易引起混乱,同时程序更简单,更有条理,便于修改。
这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。
平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。
六.参考文献
[1]揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社.2005.
[2]魏亮,李春葆编著.VisualC++程序设计例学与实践.清华大学出版社 .2006.
[3]严华峰等.VISUALC++课程设计案例精编(第二版) .中国水利水电出版社2004.
实验二
一、实验目的
练习菜单栏、工具栏及状态栏资源的创建和应用基本菜单操作和动态菜单操作
基本菜单操作和动态菜单操作
基本菜单操作
标记菜单
下面是原Menu程序文件子菜单下的内容:
通过在CMainFrame类的OnCreate函数的return语句之前添加下列语句,实现在子菜单“文件”的菜单项【新建】(索引为0)前添加标记√。
其中子菜单只能通过索引号获取,菜单项可通过索引号或其标识获取。
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
GetMenu()->GetSubMenu(0)->CheckMenuItem(0,MF_BYPOSITION|MF_CHECKED);//通过索引号获取菜单项
return0;
}
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
GetMenu()->GetSubMenu(0)->CheckMenuItem(ID_FILE_NEW,MF_BYCOMMAND|MF_CHECKED);//通过菜单项标识获取菜单项
return0;
}
程序运行结果:
在【新建】前加了标记“√””
二、默认菜单项
通过在CMainFrame类的OnCreate函数的return语句之前添加下列语句,实现将子菜单【文件】的菜单项【打开】设置为默认菜单项。
代码如下:
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
GetMenu()->GetSubMenu(0)->SetDefaultItem(1,TRUE);
//GetMenu()->GetSubMenu(0)->SetDefaultItem(ID_FILE_OPEN);(通过菜单项标识实现,其中SetDefaultItem函数的第二个参数为FALSE,是此函数的默认值,此处可省略)
return0;
}
另外,在设置默认菜单项时,分隔在子菜单中是占据索引位置的,一个菜单只能有一个默认菜单项。
上述程序运行结果如下:
【打开】菜单项已变成粗体显示
三、图形标记菜单
通过在CMainFrame类的OnCreate函数的return语句之前添加下列语句,在【新建】(索引为0)菜单项前添加自己创建的图形
intCMainFrame:
:
OnCreate(LPCREATESTRUCTlpCreateStruct)
{
CStringstr;
str.Format("x=%d,y=%d",GetSystemMetrics(SM_CXMENUCHECK),GetSystemMetrics(SM_CYMENUCHECK));//获得位图的尺寸
MessageBox(str);..//显示位图的尺寸
m_bitmap.LoadBitmap(IDB_BITMAP1);//加载创建的位图
GetMenu()->GetSubMenu(0)->SetMenuItemBitmaps(0,MF_BYPOSITION,&m_bitmap,&m_bitmap);
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 中南 大学 学院 大三 年级 面向 对象 实验 报告