c++实验报告mfc简单画图程序).doc

合集下载

vc++基于mfc简单绘图

vc++基于mfc简单绘图

利用MFC简单绘图实验报告一、实验目的1、了解学会VC++ 6.0集成环境操作界面的使用;2、使用MFC进行可视化的编程;3、能够以交互方式在图形绘制区绘制点、直线、矩形、椭圆;4、设置线条的颜色、线型和线条宽度,对绘制的图元进行线条和填充属性的修改;二、简单的功能介绍1、画点:通过Ondot()函数实现2、画直线:通过OnLine()函数实现。

3、画矩形:通过OnRectangle()函数实现。

4、画圆角矩形:通过OnRoundrect()函数实现。

5、画椭圆:通过OnEllipse()函数实现。

6、铅笔工具:可以画任意线条。

通过直接在OnMouseMove(UINT nFlags, CPoint point)函数里面添加代码实现。

7、右键弹出菜单:可以在客户中点击鼠标右键,快速选择常用菜单。

通过OnContextMenu函数实现。

8、状态栏显示鼠标移动的坐标:在程序的右下角显示,通过调用setWidnowTextGetParent()实现。

9、画图颜色选择:可以画任何颜色的线条,通过OnColor()函数实现。

10、线条类型及线宽的设置:可以将画出的线条设置成实线、虚线、点线、点划线,双点划线,还可以设置线条的粗细,通过实例这一功能立刻显示所选择线条的粗细及线型。

通过新建CLineSettingDlg类,其中OnSelchangeLineStyle()函数实现线型的OnChangeEditLineWidth()函数实现线宽的改变。

再在CDrawView类中调用OnLineSetting()函数实现画笔的对话框,CLineSettingDlg类中的OnPaint()函数是实现示例功能的。

11、窗口的重绘时不擦除原来的内容:新建CShape类用来保存线条的颜色,线宽,填充色等属性,在窗口大小发生变化时有OnDraw(CDC* pDC)函数进行重绘工作,重绘中调用了各个绘图函数的Draw(CDC *pDC)函数。

MFC绘图程序实验报告

MFC绘图程序实验报告

《面向对象课程设计》实验报告题目学生姓名学号专业班级指导老师20 年1月画图软件一.实验要求该程序设计是用MFC开发绘图软件。

此绘图软件可进行自由绘图和画规定图形,并能对图形进行颜色笔宽的编辑。

同时增加了添加背景与打开绘图文件的功能。

这个程序除了一般的绘制图形功能外还增加了自定义背景功能,使得用户可以简单便捷的进行切换背景操作,以达到美观的效果。

在背景上画图更加直接与便捷。

二、实验程序设计及结构1、需求分析(功能、类、成员)这个程序需要实现自由绘图的功能,并能绘制规定图形且能为图形变换颜色与笔宽。

其中主要在Cview类下进行操作。

其中成员函数有:afx_msg void Onfromfile(); //打开视图文件afx_msg void Onwidth2(); //设置笔宽2afx_msg void Oncolour(); //选择颜色afx_msg void OnLButtonDown(UINT nFlags, CPoint point); //鼠标按下操作afx_msg void OnLButtonUp(UINT nFlags, CPoint point); //鼠标弹起操作afx_msg void OnMouseMove(UINT nFlags, CPoint point); //鼠标移动操作afx_msg void Onwidth3(); //设置笔宽3afx_msg void Onwidth4(); //设置笔宽10afx_msg void rect(); //画矩形afx_msg void cricle() //画圆afx_msg void selfdraw(); //自由绘图成员变量有:CString filename;COLORREF m_color;int m_penwidth;short m_show_type;bool m_flag;bool m_isbuttondown;CPoint m_oldpoint;int m_draw_type;CPoint m_draw_originpt;CPoint m_draw_oldpt;设计结构(包括总体结构和数据结构)i)总体结构程序有五个菜单项,选择颜色、选择笔宽、画规定图形、自由绘图、插入背景。

画图程序设计报告(MFC)

画图程序设计报告(MFC)

Windows程序设计课程设计报告班级:计本08-1班姓名:X X学号:XXXXXXXXX指导老师:2010-11-29目录1 引言 (3)1.1 课题背景 (3)1.2 课程设计目的 (3)2 功能说明 (3)3 系统的实现 (4)3.1 视图设计 (4)3.2 编辑资源 (4)3.3 编程思路及各个函数的实现 (5)4程序功能的测试 (7)4.1测试的研究与选择 (7)4.2 测试环境 (7)5.3 实例测试结果 (7)5学习的总结 (9)6参考文献 (10)摘要:本课程设计实现的是画椭圆、矩形、直线和随手画功能等。

这个画图小程序实现了简单的画图功能,具有简洁大方的图文外观。

它的设计按软件工程的方法进行,系统具有良好的界面、必要的交互信息和简易的菜单进行操作。

即时准确地获得需要的画图的工具,适合休闲娱乐和简单的画画,对人们的生活有一定的帮助。

在课程设计中,系统开发平台为WindowsXP,程序设计设计语言采用Visual C++,在程序设计中,采用了结构化与面向对象两种解决问题的方法。

关键词:程序设计;画图;MFC;画图函数Ellipse()Restangle()1 引言1.1 课题背景本课程设计主要在生活中的娱乐,可以在本程序上进行简单的绘图娱乐。

画图是日常生活中有效的工具,能实现简单的画图。

本程序是在VC6.0中使用AppWizard创建基于对话框的应用程序。

1.2 课程设计目的画图的实现,通过C++语句实现。

在视图中实现画线功能,更好的了解MFC、C++等面向对象语言的设计和实现,运用自己所学的一些知识来实现其运用到现实的实践中,从而做到学而有用。

2 功能说明本程序可以实现的功能如下:1.运行程序后单击“编辑”菜单,选择“画矩形”后,用鼠标就可以在视图中画出一个矩形。

2.选择“画椭圆”,用鼠标就可以在视图中画出一个椭圆。

3.选择“画直线”,用鼠标就可以在视图中画出一条直线。

4.选择“随手画”,用鼠标就可以在试图中随手画画。

实验4 简单MFC应用程序

实验4 简单MFC应用程序

C语言程序设计从入门到精通——游戏修改器设计
实验4 简单MFC应用程序
1.启动Visual C++,新建一个MFC应用程序。

2.编译运行该代码,分析程序结构框架;
3.在View类的OnDraw中绘图,
(1)获取客户区大小,并获取窗口左上角和右下角坐标,理解Windows的窗口坐标
CRect rect;
GetClientRect(&rect);
(2)使用CDC在窗口绘制直线、矩形、圆(椭圆)
pDC->Rectangle
pDC->MoveTo
pDC->LineTo
(3)映射一个菜单或者按钮函数,并将绘图代码放在该函数中,理解与OnDraw绘图的区别。

使用此语句获取当前窗口的客户区DC
CclientDC dc(this);
dc.MoveTo,dc.LineTo
vector动态数组的用法(1)包含头文件和使用命名空间
#include <complex>
using namespace std;
(2)声明数组pAdressList
vector<ClassName>pAdressList;
//ClassName 是类名称如CAdress
(3)添加删除数组元素
//添加元素:
CAdress a;
pAdressList.push_back( a );
//删除第i个元素:
pAdressList.erase( pAdressList.begin() + i , 1 );。

MFC 一个简单的绘图程序

MFC 一个简单的绘图程序

MFC 一个简单的绘图程序涉及到的知识点:1. 鼠标信息的处理,2. 文档和视图的关系,3. 新建一个类及其使用方法的技巧,4. 改变窗口大小或者刷新窗口后原来所绘制的图形没有显示出来的问题。

绘制图形的原理:鼠标被用作画笔,绘图过程中要进行不同的鼠标消息的处理,如按下鼠标,移动鼠标和释放鼠标。

当用户按下鼠标左键是必须记录鼠标当前的位置,并捕获鼠标,设置光标形状;当移动鼠标时,先判断鼠标左键是否同时被按住,如果是则从上一个鼠标位置到当前鼠标位置绘制一条直线。

并保存当前鼠标位置点,供绘制下一段直线用,当释放鼠标左键时将鼠标释放给系统。

一、简单绘图程序程序的实现1.使用MFC AppWizard 应用程序向导创建一个SDI应用程序MyDraw,在视图类CMyDrawView.h中添加如下代码:protected: // create from serialization onlyCMyDrawView();DECLARE_DYNCREATE(CMyDrawView)CPoint m_ptOrigin; //起始点坐标bool m_bDragging; //鼠标是否处于拖拽状态标记HCURSOR m_hCross;//拖拽状态时鼠标的样式2. 在构造函数中对拖拽标记和鼠标样式进行初始化CMyDrawView::CMyDrawView(){// TODO: add construction code herem_bDragging=false;//初始化为falsem_hCross=AfxGetApp()->LoadStandardCursor(IDC_CROSS);//十字光标}3. 使用类向导为视图类添加按下鼠标左键,移动鼠标,释放鼠标左键的消息处理函数。

代码分别为:void CMyDrawView::OnLButtonDown(UINT nFlags, CPoint point) //按下鼠标左键{// TODO: Add your message handler code here and/or call default SetCapture();::SetCursor(m_hCross);m_ptOrigin=point;m_bDragging=true;CView::OnLButtonDown(nFlags, point);}void CMyDrawView::OnLButtonUp(UINT nFlags, CPoint point) //释放鼠标左键{ // TODO: Add your message handler code here and/or calldefault if(m_bDragging){m_bDragging=false;ReleaseCapture();}CView::OnLButtonUp(nFlags, point);}void CMyDrawView::OnMouseMove(UINT nFlags, CPoint point) //移动鼠标{// TODO: Add your message handler code here and/or callif(m_bDragging){//CMyDrawDoc * pDoc=GetDocument();//ASSERT_VALID(pDoc);//pDoc->AddLine(m_ptOrigin,point);CClientDC dc(this);dc.MoveTo(m_ptOrigin);dc.LineTo(point);m_ptOrigin=point;}CView::OnMouseMove(nFlags, point);}4.在MyDraw.CPP中设置窗口标题m_pMainWnd->SetWindowText("简单的绘图程序");此后,编译、链接,运行程序后可以将鼠标当作一个画笔绘制曲线了。

MFC画简单点线面界面实验报告

MFC画简单点线面界面实验报告
}
CView::OnLButtonDblClk(nFlags, point);
}
调试→运行→成果图:
→添加头文件#include“point.h”和#include <vector>→
加入代码:
public:
enum{
DONOTHING,
POINT,
LINESTRING,
POLYGON
};
protected:
void addPoint(const CPoint& pt);
void addLinestring(const std::vector<gis::Point>& pts);
if (mCurrentOperation==POINT) {
}else if (mCurrentOperation==LINESTRING) {
mPoints.push_back(gis::Point(point.x,point.y));
}else if (mCurrentOperation==POLYGON) {
{
gis::Point *pt;
gis::LineString *ls;
gis::Polygon *pg;
if( pt = dynamic_cast<gis::Point*>(geo) ){
drawPoint(pt,pDC);
}else if( ls = dynamic_cast<gis::LineString*>(geo)){
2)Resource View→Toolbar→ → →画图 →双击 →
→同理画出 和 并设置ID为ID_LINESTRING和ID_POLYGON

MFC画图实验报告

MFC画图实验报告
{
// TODO: Add your command handler code here
width=10;
}
void CMfcView::On20()
{
// TODO: Add your command handler code here
width=20;
}
(4).画线,曲线,矩形,圆角矩形,椭圆的功能由成员变量shape的值控制。
MFC画图程序实验报告
一.实验目的
用基于单文档应用程序创建一个类似Windows画图板的程序。功能主要有:手绘线,简单图形,画笔和画刷颜色的选择,画笔粗细的选择,文字的编辑与输出。具有菜单,通过菜单执行画线,曲线,矩形,圆角矩形,椭圆的功能,能填充图形设置图形的颜色,,实现重做和撤销,并设置字体的属性。
p2=point;
DC->SelectObject(&pen);//选择画笔pen
CRect rc(p1, p2);//定义矩形左上角和右下角点的成员变量
DC->Rectangle( rc );//画矩形
DC->DrawText( "这是我的文本框", rc, DT_CENTER);//显示文本
CView::OnRButtonUp(nFlags, point);
}
void CMfcView::Onpen()//画笔颜色按钮进行COMMAND消息响应,创建画笔。
{画笔风格为PS_DOT,由返回的整形变量width确定画笔的宽度。
// TODO: Add your command handler code here
CColorDialog dlg;
dlg.DoModal();
LOGFONT lf;

VC++实验四 MFC图形绘制编程实验

VC++实验四 MFC图形绘制编程实验

实验四 MFC图形绘制编程实验一、实验目的(1) 熟悉Visual C++ 6.0开发环境;(2) 掌握MFC消息映射的操作步骤;(2) 掌握MFC图形输出的方法;(3) 理解设备环境、画笔、画刷的概念,掌握常用的绘图函数。

二、实验内容请编写程序,要求如下:(1) 定义一支黄色画笔,绘制一条线段;(1) 定义一支紫色画笔,绘制一条多段线;(3) 定义一支红色画笔,绘制一个正方形,并用适当的画刷填充图形内部;(4) 定义一支绿色画笔,绘制一个圆,并用适当的画刷填充图形内部;(5) 定义一支蓝色画笔,绘制一个正六边形,并用适当的画刷填充图形内部。

三、实验报告1.列出图形绘制程序代码清单:(1)在头文件Demo.h中:#include "afxwin.h"class CDemoWnd:public CFrameWnd{public:CDemoWnd();~CDemoWnd();public:LRESULT OnPaint(WPARAM wParam,LPARAM lParam);DECLARE_MESSAGE_MAP()public:int m_nX0;int m_nY0;int m_nX1;int m_nY1;};class CDemoApp:public CWinApp{public:BOOL InitInstance();};CDemoApp ThisApp;(2)在源文件Demo.cpp中:#include "Demo.h"CDemoWnd::CDemoWnd(){m_nX0 = 0;m_nY0 = 0;m_nX1 = 0;m_nY1 = 0;}CDemoWnd::~CDemoWnd(){}BEGIN_MESSAGE_MAP(CDemoWnd,CFrameWnd)ON_MESSAGE(WM_PAINT,OnPaint)END_MESSAGE_MAP()LRESULT CDemoWnd::OnPaint(WPARAM wParam,LPARAM lParam) {CPaintDC dc(this);CPen Pen1,*pOldPen1;Pen1.CreatePen(PS_SOLID,10,RGB(255,255,0));pOldPen1=dc.SelectObject(&Pen1);dc.SelectObject(&Pen1);dc.MoveTo(10,10);dc.LineTo(100,100);CPen Pen2,*pOldPen2;Pen2.CreatePen(PS_SOLID,4,RGB(255,0,255));pOldPen2=dc.SelectObject(&Pen2);dc.SelectObject(&Pen2);POINT pt1[]={{100,10},{10,180},{200,150}};dc.Polyline(pt1,3);CPen Pen3,*pOldPen3;dc.SelectStockObject(BLACK_BRUSH);Pen3.CreatePen(PS_SOLID,4,RGB(255,0,0));pOldPen3=dc.SelectObject(&Pen3);dc.SelectObject(&Pen3);dc.Rectangle(300,50,400,150);CPen Pen4,*pOldPen4;dc.SelectStockObject(GRAY_BRUSH);Pen4.CreatePen(PS_SOLID,4,RGB(0,255,0));pOldPen4=dc.SelectObject(&Pen4);dc.SelectObject(&Pen4);dc.Ellipse(500,200,700,400);CPen Pen5,*pOldPen5;Pen5.CreatePen(PS_SOLID,4,RGB(0,0,255));pOldPen5=dc.SelectObject(&Pen5);dc.SelectStockObject(DKGRAY_BRUSH);dc.SelectObject(&Pen5);POINT pt2[]={{250,250},{400,250},{475,379},{400,509},{250,509},{175,379}};dc.Polygon(pt2,6);return 0;}BOOL CDemoApp::InitInstance(){CDemoWnd *pMainWnd = new CDemoWnd();pMainWnd->Create(NULL,"Demo Mini-MFC");pMainWnd->ShowWindow(m_nCmdShow);pMainWnd->UpdateWindow();m_pMainWnd = pMainWnd;return TRUE;}2、程序运行结果:3、总结在MFC 程序中绘制图形的基本操作步骤:(1)获取图形设备接口。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
penstyle=PS_SOLID;//初始化线型为实线
}
2.形状函数
void CDrawView::OnLine()
{
shape=1;
}
void CDrawView::OnRect()
{
shapOnEllipse()
{
shape=3;
}
3.线宽改变函数
void CDrawView::OnW1()
{
penstyle=PS_DASHDOT;
}
5.颜色选择函数
void CDrawView::OnColor()
{
CColorDialog Color;//创建颜色对话框
if(Color.DoModal()==IDOK)//如果用户点击OK按钮
{
m_nColor=Color.GetColor();//更改颜色,把颜色赋到m_nColor
4.改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为黑色。
}
}
8.菜单勾选函数
void CDrawView::OnUpdateLine(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(shape==1); //shape为1时,直线选项前打上勾
}
void CDrawView::OnUpdateRect(CCmdUI* pCmdUI)
{
pCmdUI->SetCheck(shape==2); //shape为2时,直线选项前打上勾
}
}
7.单击、移动、绘画函数
void CDrawView::OnLButtonDown(UINT nFlags, CPoint point)
{
m_Down=TRUE;//鼠标按下
SetCapture(); //获取坐标
opoint=point; //把鼠标所在坐标赋给起点坐标opoint
ReleaseCapture(); //释放坐标
4.改变线色
在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w, m_nColor),线的颜色处用m_nColor表示,则改变m_nColor即改变了画笔的颜色。选择菜单绘图→颜色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_nColor,此时画笔的颜色就会发上变化。若不选择颜色,则默认(线)颜色为黑色。
V
一、实验目的
掌握MFC编程
二、实验内容
用MFC向导创建单文档应用程序,一个简单的画图程序。
使用C++语言实现
使用VC++6.0集成开发环境开发
使用MFC应用程序开发框架
三、实验步骤
基本功能描述
1.打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
}
if(2==shape)///画矩形
{
dc.Rectangle(opoint.x,opoint.y,cpoint.x,cpoint.y); //绘制矩形
}
if(3==shape)//画椭圆
{
dc.Ellipse(opoint.x,opoint.y,cpoint.x,cpoint.y);//绘制椭圆
四、结果及源代码
4.1
1.点击链接,编译,运行后的窗口如图7所示。
图7 运行结果
4.2
1.在视图类构造函数中对各定义变量初始化
CDrawView::CDrawView()
{
w=1;//初始状态时线宽
shape=1;//初始状态时形状
m_nColor=RGB(0,0,0);//初始状态时线色
m_fColor=RGB(0,0,0);//初始状态时填充色
2.选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
设计思路
1.对需要用到的变量进行初始化。
2.选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
dc.SelectObject(&pen); //获取画笔
dc.SelectObject(&brush); //获取画刷
if(1==shape)//画直线
{
dc.MoveTo(opoint.x,opoint.y);
dc.LineTo(cpoint.x,cpoint.y); //绘制直线,从opoint到cpoint连线
5.绘制图形
鼠标左键按下,则捕获鼠标此时的位置坐标为画图的起点,此时在OnLButtonDown()函数里,将捕获的坐标值赋给定义作为起点的变量opoint;按下鼠标左键拖动鼠标时,捕捉鼠标当前位置坐标值为终点坐标值,此时在OnMouseMove()函数里,把捕获的坐标值赋给定义作为终点的变量cpoint,OnPaint()中绘图的代码中的坐标都得到了,进行绘图;鼠标左键弹起时,此时绘图结束,鼠标弹起时所在位置就是画图的最终终点位置,画图结束后,刷新窗口,以便重新画图,此时执行的是OnLButtonUp()函数。
}
}
6.填充色选择函数
void CDrawView::OnFullcolor()
{
CColorDialog FullColor;//创建颜色对话框
if(FullColor.DoModal()==IDOK)//如果用户点击OK按钮
{
m_fColor=FullColor.GetColor();//更改颜色,把颜色赋到m_nColor
线宽5
ID_W5
建立类向导,在视图类CDrawView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图6所示。
图6 建立类向导
3.在相应消息函数处添加代码,实现其功能
建立类向导,在视图类CDrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。
}
void CDrawView::OnMouseMove(UINT nFlags, CPoint point)
{
if(m_Down) //如果鼠标按下
{
cpoint=point; //把鼠标所在点坐标赋给终点坐标cpoint
CClientDC dc(this);
if(4==shape)//画曲线
{
CPen pen(PS_SOLID,10,RGB(255,0,0));
3.鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
4.选择图形或其它属性,可进行下一次绘制。
软件设计
A 设计步骤
1.创建单文档
创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。创建成功后,系统自动生成相应的类,如图3所示。
{
w=1;
}
void CDrawView::OnW2()
{
w=2;
}
void CDrawView::OnW3()
{
w=3;
}
void CDrawView::OnW4()
{
w=4;
}
void CDrawView::OnW5()
{
w=5;
}
void CDrawView::OnW6()
{
w=6;
}
4.线型选择函数
CView::OnLButtonDown(nFlags, point);
}
void CDrawView::OnLButtonUp(UINT nFlags, CPoint point)
{
m_Down=FALSE; //鼠标不按下,即弹起
Invalidate(0); //刷新
CView::OnLButtonUp(nFlags, point);
{
CPaintDC dc(this); // device context for painting
CPen pen; //定义画笔
CBrush brush; //定义画刷
pen.CreatePen(penstyle,w, m_nColor); //创建画笔
brush.CreateSolidBrush(m_fColor); //创建画刷
表1 菜单项对应ID
菜单名
ID
菜单名
ID
菜单名
ID
直线
ID_LINE
线宽1
ID_W1
实线
ID_SOLID
矩形
ID_RECT
线宽2
ID_W2
虚线
ID_DASH
椭圆
ID_ELLIPSE
线宽3
ID_W3
点线
ID_DOT
颜色
相关文档
最新文档