MFC制作绘图板C++课程设计文档格式.docx
- 文档编号:8063930
- 上传时间:2023-05-10
- 格式:DOCX
- 页数:37
- 大小:3.70MB
MFC制作绘图板C++课程设计文档格式.docx
《MFC制作绘图板C++课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《MFC制作绘图板C++课程设计文档格式.docx(37页珍藏版)》请在冰点文库上搜索。
理论(60%):
分,作品(40%):
分,总分:
分。
验收盖章
2013年月日
第1章VC++和MFC的基本介绍.
1.1VC++6.0介绍.................................................................................3
1.2MFC介绍........................................................................................4
第2章基本功能
2.1创建单文档......................................................................................5
2.2添加成员变量..................................................................................6
2.3新建工具栏......................................................................................6
2.4编辑菜单..........................................................................................9
2.5建立相应类向导.............................................................................10
2.6添加消息函数.................................................................................15
第3章简易画图板的制作
3.1设计目的.......................................................................................25
3.2详细设计.........................................................................................28
3.3点、直线、矩形、椭圆的绘制.....................................................28
3.4改变线色.......................................................................................28
3.5改变线宽.........................................................................................29
3.6设置填充色对话框.......................................................................29
3.7绘制图形.........................................................................................29
第4章结果及结论
4.1测试结果.........................................................................................30
4.2参考文献.........................................................................................31
4.3心得体会........................................................................................31
4.4关键源代码.....................................................................................32
第1章
1.1VC++6.0介绍:
VisualC++6.0,简称VC或者VC6.0,是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
自1993年Microsoft公司推出VisualC++1.0后,随着其新版本的不断问世,VisualC++已成为专业程序员进行软件开发的首选工具。
虽然微软公司推出了VisualC++.NET(VisualC++7.0),但它的应用的很大的局限性,只适用于Windows2000、WindowsXP和WindowsNT4.0。
所以实际中,更多的是以VisualC++6.0为平台。
VC++6.0
VisualC++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrateddevelopmentenvironment,IDE)。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
1.2MFC介绍:
MFC实际上是微软提供的,用于在C++环境下编写应用程序的一个框架和引擎。
VC++是Windows下开发人员使用的专业C++SDK(SDK,StandardSoftWareDevelopKit,专业软件开发平台),MFC就是挂在它之上的一个辅助软件开发包。
MFC作为与VC++血肉相连的部分(注意C++和VC++的区别:
C++是一种程序设计语言,是一种大家都承认的软件编制的通用规范;
而VC++只是一个编译器,或者说是一种编译器+源程序编辑器的IDE(IDE的英文全称为“IntegratedDevelopmentEnvironment”,即“集成开发环境”),WSPlatForm,这跟Pascal和Delphi的关系一个道理。
Pascal是Delphi的语言基础,Delphi使用Pascal规范来进行Win下应用程序的开发和编译,却不同于Basic语言和VB的关系。
Basic语言在VB开发出来被应用的年代已经成了Basic语言的新规范,VB新加的Basic语言要素,如面向对象程序设计的要素,是一种性质上的飞跃,使VB既是一个IDE,又成长成一个新的程序设计语言)。
MFC同VC++集成的VCL一样是一个非外挂式的软件包类库,只不过MFC类是微软为VC++专配的。
MFC是WinAPI与C++的结合。
API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但不是一种程序开发语言本身,可以允许用户使用各种各样的第三方(如我是一方,微软是一方,Borland就是第三方)的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,比如VB、VC++、Java、Delhpi。
编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系统的内部实现,这其实也是一种必要。
微软如果不提供API,这个世上对Windows编程的工作就不会存在,微软的产品就会迅速从时尚变成垃圾。
上面说到MFC是微软对API函数的专用C++封装,这种结合一方面让用户使用微软的专业C++SDK来进行Windows下应用程序的开发变得容易,因为MFC是对API的封装,微软做了大量的工作,隐藏了好多程序开发人员在Windows下用C++&
MFC编制软件时的大量内节,如应用程序实现消息的处理、设备环境绘图,这种结合是以方便为目的的,必定要付出一定代价(这是微软的一向作风),因此就造成了MFC对类封装中的一定程度的的冗余和迂回,但这是可以接受的。
最后要明白MFC不只是一个功能单纯的界面开发系统,它提供的类绝大部分用来进行界面开发,关联一个窗口的动作,但它提供的类中有好多类不与一个窗口关联,即类的作用不是一个界面类,不实现对一个窗口对象的控制(如创建、销毁),而是一些在Windows(用MFC编写的程序绝大部分都在Windows中运行)中实现内部处理的类,如数据库的管理类等。
学习中最应花费时间的是消息和设备环境,对C++和MFC。
MFC是微软封装了的API。
什么意思呢?
Windows作为一个提供功能强大的应用程序接口编程的操作系统,的确方便了许多程序员,传统的win32开发(直接使用Windows的接口函数API)对于程序员来说非常的困难,因为,API函数实在太多了,而且名称很乱,从零构架一个窗口动辄就是上百行的代码。
MFC是面向对象程序设计与Applicationframework的完美结合,它将传统的API进行了分类封装,并且为你创建了程序的一般框架。
MFC是对WindowsAPI的封装,大大简化了我们的工作;
学VC主要就是要学MFC,大约有100多个类,但常用的也就二三十个。
应该象背4级单词一样将这些常用类搞懂;
当然不要死记,要通过看帮助、看例子、动手练习来学会它们;
而且,并非每个类的内部的所有函数都要学会,要日积月累。
如果真的想成为高手,做个笔记本把自己认为重要的类、函数记下来,随时学习,也是很好的突击方法。
第2章
2.1创建单文档
创建一个MFC
AppWizard[exe]工程,命名为“yinshuyan”,如图1所示,并创建单文档,如图1所示。
创建成功后,系统自动生成相应的类,如图2所示。
图1创建工程
图二选择单文档
2.2添加成员变量:
控件名称
控件类型
属性
相关变量
绘图
下拉式菜单
无
直线
菜单项工具栏按钮
ID_LINE
intshape
矩形
ID_RECT
Intshape
椭圆
ID_ELLPSE
线宽
弹出式菜单
intw
颜色
ID_COLOR
COLORREFm_nColor
填充色
ID_FULLCOLOR
COLORREFm_fColor
表1控件属性表
图3添加成员变量
2.3新建工具栏:
图4新建工具栏
2.4编辑菜单
:
添加需要的菜单项,如图3所示;
并在菜单的属性中设定好所对应的ID,如图4所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)
菜单名
1
ID
线宽1
ID_W1
ID_LINE
线宽2
ID_W2
矩形
ID_RECT
线宽3
ID_W3
椭圆
ID_ELLIPSE
线宽4
ID_W4
颜色
ID_COLOR
线宽5
ID_W5
填充色
ID_FILLCOLOR
线宽6
ID_W6
表2菜单项对应ID
图5生成菜单栏
图6设置菜单ID
2.5建立类向导:
在视图类CyinshuyanView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数
图7建立类向导
W1,W2,W3,W4,W5分别添加代码如下:
相应的代码分别如下:
相应代码分别如下:
2.6添加消息函数:
4在相应消息函数处添加代码,实现其功能
建立类向导,在视图类CyinshuyanView中,添加WM_PAINT消息,以及
WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。
图8添加WN_PAINT消息
添加代码如下:
图10添加WN_BUTTONDOWN消息
图11添加WN_MOSEMOVE消息
相应代码如下:
第3章简易绘画板制作:
3.1设计目的和思路:
在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。
对需要用到的变量进行初始化。
选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
选择图形或其它属性,可进行下一次绘制。
3.2选择要绘制的图形
在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:
当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape
=2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。
3.3改变线宽
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w,
m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。
选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。
若不选择线宽值,则w=1(即默认线宽值为1)。
3.4改变线色
在OnPaint()创建的画笔中,pen.CreatePen(PS_SOLID,w,
m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。
选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。
若不选择颜色,则默认(线)颜色为黑色。
3.5改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。
选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。
若不选择颜色,则默认填充色为黑色。
3.6绘制图形
鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;
按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;
鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。
第4
章结果及结论
4.1测试结果
1)点击链接,编译,运行后的窗口如图10所示。
2)改变绘制图形形状,颜色,线宽,填充色之后绘制的图形如图11所示。
图10
运行结果
4.2
参考文献
:
[1]揣锦华.面向对象程序设计与VC++实践.西安电子科技大学出版社.2005.
[2]魏亮,
李春葆编著.Visual
C++程序设计例学与实践.清华大学出版社
.2006.
[3]严华峰等.VISUAL
C++课程设计案例精编(第二版)
.中国水利水电出版社
2004.
1)一开始我并没有添加刷新函数Invalidate(),这就使程序运行之后,无论鼠标左键按下时如何移动无法绘图,这是因为当一个窗口内键入内容其实就是将窗口刷新了,相当于更新了窗口,故必须有刷新函数,这和生活中的白纸写字不一样。
2)当添加Invalidate()后,我把Invalidate()放在OnMouseMove()里,但是这样只能在窗口内画一个图形,即每画完一个图形就刷新一次。
之后我通过与同学讨论,并查找资料将Invalidate()改为了Invalidate(0),这时是可绘制多个图形,但鼠标每移动一个位置都进行一次刷新,绘图结束后,绘图过程中的所有痕迹都在,产生了很多拖动的影子。
,经过几次试验,我将Invalidate(0)
放在了OnLButtonUp()中,那么每次重绘,上次的图形会作为背景被保留下来,而不会被刷新掉。
4.3心得体会:
这次课程设计我成功的完成了。
通过本次课程设计,我完成了用移动鼠标对直线,矩形,椭圆的简单绘制工具的的制作,其中完成了绘图形状的选择,画图线宽、线色以及图形填充色的设置。
基于平时课外上机实验的练习,对菜单的创建,COMMAND消息处理函数和
UPDATE_COMMAND_UI消息函数的添加过程比较熟练,这部分还算简单。
难的是代码的添加,对绘制图形的程序有大概的思路,但具体编写时变量的运用以及函数的调用设置。
这次实验中关键就是确定画图起点及终点坐标,因为是用鼠标绘制图形,所以需用函数来捕获鼠标当前所在位置的坐标,因此我设置了OnLButtonDown()函数来捕获起点坐标,OnMouseMove()函数来捕获鼠标移动是的当前位置坐标,OnLButtonUp()函数来捕获终点坐标。
而绘制图形使用的函数是OnPaint(),将图形的起点和终点坐标和鼠标的位置坐标相联系后就能用鼠标来绘制图形了,所以在它们之间用opoint和cpoint两变量实现链接。
另外我觉得将绘图语句集中在OnPaint()函数中,然后其他函数来调用OnPaint()函数,这样不容易引起混乱,同时程序更简单,更有条理,便于修改。
这次课程设计虽只是做了一个极其简单的绘图工具的制作,但也让我从设计者的角度看到了设计程序以及电脑软件工具的实质及难度,看似一个很简单的工具,其制作的背后工作是很大的,不光是图标,按钮的设置,程序的编写,代码的实现都是很精密且不容许一点错误的工作。
平时我们使用的很顺手的一个小小工具,其开发的各项小号都不可小觑,由此,我们需要学的东西还太多太多。
4.4关键源代码
1)在“MainFrm.h”中,在class
CMainFrame
public
CFrameWnd里的protected下定义:
CToolBar
m_drawToolBar;
//工具栏
2)在“MainFrm.cpp”中,在CMainFrame:
OnCreate(LPCREATESTRUCT
lpCreateStruct)里添加以下代码:
if
(!
m_drawToolBar.Create(this)
||
!
m_drawToolBar.LoadToolBar(IDR_DRAW))
{
TRACE0("
Failed
to
create
status
bar\n"
);
return
-1;
}
3)在“YinshuyanView.h”中,在class
CYinshuyanView
CView里的public下定义相关变量:
COLORREF
m_nColor;
m_fColor;
CPoint
cpoint;
opoint;
BOOL
m_Down;
int
w;
shape;
4)在“YinshuyanView.cpp”中,添加如下函数及代码:
CYinshuyanView:
CYinshuyanView()
{
w=1;
//初始线宽默认为1
shape=0;
void
OnW1()
//令线宽为1
OnW2()
w=2;
//令线宽为2
CYinshuyan:
OnW3()
w=3;
//令线宽为3
OnW4()
w=4;
//令线宽为4
OnW5()
w=5;
//令线宽为5
OnUpdateW1(CCmdUI*
pCmdUI)
pCmdUI->
SetRadio(w==1);
//当线宽为1时,此选项前标有圆点
OnUpdateW2(CCmdUI*
pCmdUI->
SetRadio(w==2);
//当线宽为2时,此选项前标有圆点
OnUpdateW3(CCmdU
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 制作 绘图板 C+ 课程设计