MFC实现简单画图形程序(学习相关)

合集下载

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简单绘图程序报告

mfc简单绘图程序报告简单绘图程序1 需求说明1.1 问题描述设计一个简单的绘图应用程序,可以绘制图形或自由绘制线段,可以更改颜色、画笔粗细、保存文件。

1.2功能说明1.图形绘制功能:直线、椭圆、矩形。

在菜单栏中选择需要的图形(也可以通过工具栏中选择)用鼠标便能在视图中绘出相应的图形。

2.可以绘制自由线段3.对图形的操作:能通过菜单栏弹出对话框选择线宽、自定义颜色,也可以擦除绘制的线段。

4.可以保存绘图文件,保存后打开可以继续绘制。

2.1.3 数据说明在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。

在CDzyView类中添加一个私有变量xz;用来保存用户的选择(直线、矩形、椭圆、自由绘图)在绘制时都可有两点来确定其图形。

当鼠标左击时得到一个点,当鼠标停止移动时得到另外一个点。

为视图类CDzyView分别捕获鼠标左键按下和弹起这两个消息。

当鼠标左键按下时,需要将鼠标当前按下点保存至sx、sy,在鼠标移动停止后,将当前坐标保存至ex,ey.其他主要数据说明:int fd 判断是否为自由绘图模式int w 线宽int R RGB中的Rint G RGB中的Gint B RGB中的BCGraph类中int m_nType:保存后重绘时用户的选择int qdx; 重绘起点xint qdy; 重绘起点yint zdx; 重绘终点xint zdy; 重绘终点yCLine类中int cx; 重绘线宽int sx; 重绘起点xint sy; 重绘起点yint zx; 重绘终点xint zy; 重绘终点yint w; 重绘线宽自定义颜色对话框关联变量:IDC_EDIT_RED int m_RedIDC_EDIT_GREEN int m_GreenIDC_EDIT_BLUE int m_BlueIDC_SCROLL_RED CScrollBar m_SredIDC_SLIDER_GREEN CSliderCtrl m_SgreenIDC_SPIN_BLUE CSpinButtonCtrl m_Sblue2 分析、设计与实现2.1 主要功能设计与实现2.1.1 有关文档视图功能的设计与实现单文档结构可序列化的类CGraph从CObject派生可序列化的类CLine从CObject派生对话框类zdyyanse从CDialog派生2.1.2 有关消息处理的设计与实现方案:需要响应的消息应有:鼠标移动、鼠标左键按下、鼠标左键抬起、菜单栏中的画矩形、画直线、画椭圆、自由绘图、更多选项中的自定义颜色、工具栏中的红色、蓝色、绿色、线宽1、线宽2、线宽3、橡皮擦。

mfc画图课程设计

mfc画图课程设计

mfc 画图课程设计一、教学目标本课程旨在通过MFC画图的学习,让学生掌握以下知识目标:1. 理解MFC的基本概念和原理;2. 掌握MFC的基本绘图方法;3. 了解MFC绘图的应用场景。

技能目标:1. 能够运用MFC进行简单的图形绘制;2. 能够通过MFC实现图形的基本操作;3. 能够运用MFC解决绘图相关问题。

情感态度价值观目标:1. 培养学生对计算机编程的兴趣和热情;2. 培养学生独立思考和解决问题的能力;3. 培养学生团队协作和交流的能力。

二、教学内容本课程的教学内容主要包括以下几个部分:1. MFC的基本概念和原理;2. MFC 的基本绘图方法;3. MFC绘图的应用场景。

详细的教学大纲如下:第1周:MFC的基本概念和原理1.1 MFC的定义和发展历程1.2 MFC的基本组成和架构1.3 MFC的优点和缺点第2周:MFC的基本绘图方法2.1 MFC绘图环境的基本操作2.2 MFC绘图工具的使用2.3 MFC绘图方法的具体实现第3周:MFC绘图的应用场景3.1 MFC绘图在实际项目中的应用3.2 MFC绘图在解决实际问题中的优势3.3 MFC绘图在其他领域的拓展三、教学方法为了提高教学效果,本课程将采用以下教学方法:1.讲授法:通过讲解MFC的基本概念、原理和绘图方法,让学生掌握相关知识。

2.案例分析法:通过分析实际项目中的应用案例,让学生了解MFC绘图在实际场景中的应用。

3.实验法:让学生动手实践,亲自编写代码,绘制图形,提高学生的实际操作能力。

四、教学资源为了支持本课程的教学,我们将准备以下教学资源:1.教材:《MFC画图教程》2.参考书:《MFC编程入门》、《MFC实例解析》3.多媒体资料:教学PPT、视频教程4.实验设备:计算机、编程环境(如Visual Studio)五、教学评估本课程的评估方式将包括以下几个方面:1.平时表现:包括课堂参与度、提问回答、小组讨论等,占总评的30%。

MFC实现简单画图形程序

MFC实现简单画图形程序

《MFC编程及应用》课程设计报告题目:简单画图形程序学号:姓名:指导老师:时间:程序设计步骤:一、建立基于对话框的应用程序框架;二、CMy0910200155Dlg类中关键新增变量的作用:CPtrArray pta; //用于保存已绘图形的相关信息。

CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过程中动态保存对象信息。

CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读取信息时动态创建类的对象。

COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。

COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。

int num; //用于存放从"Index.txt"文件中读取的数字。

int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时,表示按下了”撤消”按钮;当为3时,表示按下了”加载历史”按钮,则从文件中读取信息。

int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示刚画过圆角矩形;当为2时,表示刚画过椭圆。

int index; //用于存放pta数组的容量。

int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘问题。

int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg的一个接口,通过其值在1和0之间转换,来处理弹出式对话框的初次绘制和移动时的重绘问题。

三、CMemoryNode类中变量的作用:COLORREF BrushColor;COLORREF PenColor;int Mark; //以上三者为类CMemoryNode的成员变量,分别用来保存绘图时画刷颜色,画笔颜色和形状。

四、与控件相关联的变量:CComboBox m_BrushColor; //指示画刷颜色组合框。

MFC画图程序步骤

MFC画图程序步骤

MFC画图程序步骤MFC(Microsoft Foundation Class)是一种用于开辟Windows应用程序的C++类库。

在MFC中,我们可以使用GDI(Graphics Device Interface)来创建和操作图形。

下面是使用MFC创建一个简单的画图程序的步骤。

步骤1:创建一个新的MFC项目首先,打开Visual Studio并选择创建一个新的项目。

在项目类型中,选择Visual C++ -> MFC,然后选择MFC应用程序类型。

输入项目名称并选择保存的位置。

在应用程序类型中,选择“单文档”或者“多文档”视图,具体根据你的需求而定。

点击“确定”按钮创建项目。

步骤2:设计用户界面在MFC应用程序中,用户界面是通过对话框资源来设计的。

在资源视图中,双击IDD_DIALOG(或者其他对话框资源)以打开对话框编辑器。

在对话框编辑器中,你可以添加按钮、文本框、菜单等控件来设计你的用户界面。

在画图程序中,你可以添加一个画布控件来显示绘制的图形。

步骤3:添加绘图功能在MFC中,你可以使用GDI来进行绘图操作。

打开你的对话框类的头文件(例如,CMyDialog.h),添加以下头文件引用:#include <afxwin.h>#include <afxext.h>#include <afxdisp.h>在对话框类的源文件(例如,CMyDialog.cpp)中,添加以下代码来处理绘图操作:```void CMyDialog::OnPaint(){CPaintDC dc(this); // 用于绘制的设备上下文// 在这里进行绘图操作dc.Rectangle(100, 100, 200, 200); // 绘制一个矩形dc.Ellipse(300, 100, 400, 200); // 绘制一个椭圆}```步骤4:处理绘图事件在对话框类的消息映射中添加对绘图事件的处理。

mfc简单绘图程序文件

mfc简单绘图程序文件

M F C简单的绘图程序——王帅目录摘要 (2)关键字 (2)1 引言 (2)设计目的 (3)2 功能说明 (2)2.1菜单栏 (3)2.1.1图形 (3)2.1.2画笔 (4)2.1.3画硬币 (4)2.2工具栏 (5)2.3状态栏 (5)3 功能的实现 (5)3.1 视图设计 (5)3.2 编辑资源 (6)3.3 编程思路及各个函数的实现 (7)(1)思路 (7)(2)代码的实现 (7)1.为基本形状创建一个基类 (8)2.基本形状类的创建 (8)2.1矩形类的创建及定义 (8)2.2圆形类的创建及定义 (10)2.3正五边形类的创建及定义 (11)2.4正三角形类的创建及定义 (14)2.5椭圆类的创建及定义 (16)2.6正四边形类的创建及的定义 (17)2.7正六边形类的创建及定义 (18)2.8直线类的创建及定义 (19)3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20)3.1矩形类的调用与与绘图的实现 (20)3.2圆形类的调用 (24)3.3正三角形类的调用 (25)3.4基本类型调用的剩余代码 (26)4.画笔的使用、颜色及大小的调整 (29)5.画硬币 (35)6.工具栏中的自定义控件 (38)7.状态栏中的显示 (39)4程序功能的测试 (41)5最后总结 (42)摘要:本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等。

除此之外,还能够进行随手画,即用鼠标随意画线条。

为了更好的绘图,还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜色,颜色还可根据输入的RGB值随意更改。

还有一些老师的要求,加入了画硬币、显示硬币数目即鼠标坐标等信息。

本程序主要采用面向对象写法。

关键字:程序设计,MFC,绘图1.引言设计目的本绘图程序的设计不仅仅局限于老师课堂的要求,通过C++的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFC,更好地去实现自己的想法。

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

实验四 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 "tpd1.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)获取图形设备接口。

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("简单的绘图程序");此后,编译、链接,运行程序后可以将鼠标当作一个画笔绘制曲线了。

基于VC MFC程序设计——简易画图板

基于VC  MFC程序设计——简易画图板

包头师范学院本科学年论文论文题目:基于VC++MFC程序设计——简易画图板院系:信息科学与技术学院专业:计算机科学与技术学号:姓名:指导教师:撰写学年:2010至2011学年二零一零年十二月摘要本软件是利用VC++这个强大的可视化编程工具开发的,软件主要功能包括图形的绘制、线型的设置、颜色的设置,图形文件的重绘和保存等功能。

本文介绍了如何完成上述功能,同时详细阐述了画图系统的实现过程以及对画图系统所做的功能扩充。

在画图软件设计上,其主要任务是:实现“绘制图形”、“图形的保存”两项功能。

本软件具有实用性、稳定性、易用性,和可维护性的特点,应该说它应是一个开放性的软件,用户可以根据需要对其功能进行扩充、完善与修改,使其符合自己的要求。

总之,本软件是一个逐步完善的软件。

关键词:VC++;MFC;绘图AbstractThis software is using vc + + this powerful visual programming tool development, software main functions including graphics rendering, linetype Settings, color setting, graphics file redraw of preserving and function.The paper introduced how to accomplish these functions, and explains in detail drawing system realization process and to drawing system do function expansion. In drawing software design, its main task is to achieve "drawings", "graphic save" two functions.This software has practicability, stability, ease-of-use, and maintainability characteristic, should say it should be an open software, the user can according to the needs of its functions were expansion, perfect and modification, make them comply with their requirements. Anyhow, this software is a perfect gradually software.Key words:Vc + +; MFC; drawing目录引言 (1)第1章vc++6.0和MFC简介 (2)1.1 vc++6.0简介 (2)1.2 MFC简介 (2)第2章基础知识 (2)2.1工程的新建 (3)2.2单文档简介 (4)2.3添加消息响应函数 (5)2.4资源 (5)2.5设备环境 (6)第3章简易画图板的制作 (6)3.1设计目的 (6)3.2 总体设计 (7)3.3详细设计 (7)3.3.1点、直线、矩形、椭圆的绘制 (9)3.3.2连续线和扇形的绘制 (11)3.3.3画刷 (13)3.3.4设置对话框 (15)3.3.5颜色 (16)3.3.6打开与保存 (17)第4章结果及结论 (17)4.1运行结果 (17)4.2结论 (18)参考文献 (20)附录:简易画图板主要程序代码 (21)致谢 (31)引言计算机技术的发展,使人类社会进入了信息化和自动化,计算机智能识别也随着计算机的发展得到了迅速的发展。

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;

基于MFC的简单画图程序实验

基于MFC的简单画图程序实验

简单画图程序【实验目的】本实验目的是通过构建基于MFC的windows画图程序,使学生:(1) 理解MFC应用程序的运行机制(2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法(3) 理解和掌握MFC应用程序消息处理机制及应用(4) 掌握类向导(ClassWizard)的使用【实验要求】(1) 必须做好实验原理的预习。

(2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。

【实验环境】Microsoft Windows XPMicrosoft Visual C++ 6.01 基本功能描述1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。

2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。

3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

2 设计思路1) 对需要用到的变量进行初始化。

2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。

选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。

4) 选择图形或其它属性,可进行下一次绘制。

图1 程序流程图3 软件设计3.1 设计步骤1)创建单文档创建一个MFC AppWizard[exe]工程,命名为“yinshuyan”,如图2所示,并创建单文档,如图3所示。

mfc简单绘图程序

mfc简单绘图程序

M F C简单的绘图程序——王帅目录摘要 (2)关键字 (2)1 引言 (2)设计目的 ............................................................................................................... 错误!未定义书签。

2 功能说明 (2)2。

1菜单栏...................................................................................................... 错误!未定义书签。

2。

1.1图形 (3)2.1。

2画笔 (4)2。

1。

3画硬币 (4)2。

2工具栏 (5)2.3状态栏 (5)3 功能的实现 (5)3.1 视图设计 (5)3.2 编辑资源 (6)3。

3 编程思路及各个函数的实现 (7)(1)思路 (7)(2)代码的实现 (7)1。

为基本形状创建一个基类 (8)2.基本形状类的创建 (8)2.1矩形类的创建及定义 (8)2。

2圆形类的创建及定义 (10)2.3正五边形类的创建及定义 (11)2。

4正三角形类的创建及定义 (14)2。

5椭圆类的创建及定义 (16)2.6正四边形类的创建及的定义 (17)2。

7正六边形类的创建及定义 (18)2.8直线类的创建及定义 (19)3.各基本形状类在CMyDraw2_0类中的调用和绘图的实现 (20)3。

1矩形类的调用与与绘图的实现 (20)3.2圆形类的调用 (24)3.3正三角形类的调用 (25)3。

4基本类型调用的剩余代码 (26)4。

画笔的使用、颜色及大小的调整 (29)5.画硬币 (35)6.工具栏中的自定义控件 (38)7。

状态栏中的显示 (39)4程序功能的测试 (41)5最后总结 (42)摘要:本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等。

MFC中简单绘图控制

MFC中简单绘图控制

MFC中简单绘图控制首先建立Graphic2单文档应用程序,在菜单栏帮助菜单后面,新建名为绘图的菜单项,并在其下面新建四个子菜单:IDM_DOT点, IDM_LINE直线,IDM_RECTANGLE矩形, IDM_ELLIPSE椭圆,并在视类中添加其对应的响应函数。

同时添加一变量:private: int m_pt用以标志用户的选择。

点:m_pt=1;直线:m_pt=2,矩形:m_pt=3;椭圆:m_pt=4。

再添加鼠标左键按下和弹起响应函数。

再添加一成员变量,用以保存左键按下时的坐标:private:CPoint m_ptOrigin;void CGraphic2View::OnLButtonDown(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call defaultm_ptOrigin=point;CView::OnLButtonDown(nFlags, point);}void CGraphic2View::OnLButtonUp(UINT nFlags, CPoint point){// TODO: Add your message handler code here and/or call default CClientDC dc(this);CPen pen;//设定画笔pen.CreatePen(PS_SOLID,2,RGB(255,0,0));CPen *pOldpen=dc.SelectObject(&pen);CBrush*Brush=CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));//设定透明画刷CBrush *pOldBrush=dc.SelectObject(Brush);switch(m_pt){case 1:dc.SetPixel(point,RGB(255,0,0));break;case 2:dc.MoveTo(m_ptOrigin);dc.LineTo(point.x,point.y);break;case 3:dc.Rectangle(CRect(m_ptOrigin,point));break;case 4:dc.Ellipse(m_ptOrigin.x,m_ptOrigin.y,point.x,point.y);break;}dc.SelectObject(&pOldpen);dc.SelectObject(&pOldBrush);CView::OnLButtonUp(nFlags, point);}CBrush::FromHandle((HBRUSH)GetStockObject(NULL_BRUSH));CBrush::FromHa ndle:Returns a pointer to a CBrush object when given a handle to a Windows HBRUSH object.这个函数的意义是将从windows返回的HBrush句柄转换成一个CBrush的指针,这里有一个问题那就是GetStockObject返回的句柄不是HBrush 的,而是HGDIOBJ的,因此我们还需要进行强制转化.改变线宽:首先新建一对话框:ID=IDM_DLG_SETTING;caption=setting;添加一静态文本:caption=线宽;添加一编辑框:ID=IDM_LINE_WIDTH.建立一个与对话框对应的类,类名为CSettingDlg。

MFC基本绘图—简单画图工具开发

MFC基本绘图—简单画图工具开发


两个参数分别表示:刷子的填充样式,刷子的颜色。
构造函数: CBrush( COLORREF crColor ) CBrush( int nIndex ,COLORREF crColor)
nIndex填充样式的6种风格
水平线 竖直线 向下斜线 向上斜线 十字线 交叉线

HS_HORIZONTAL HS_VERTICAL HS_BDIAGNAL HS_FDIAGONAL HS_CROSS HS_DIAGCROSS
pDC->SelectObject(&DrawBrush);
pDC->Rectangle(rc); //绘制带有填充样式的矩形 pDC->SelectObject(pOldBrush); }
实验步骤指导
1.应用AppWizard向导生成一个单文档应用程序 2. 增加若个按钮控制绘图工具和相关设置。
0 1 2 3 4 5
void CListDlg::Draw()
{
CWnd* pWnd=GetDlgItem(IDC_STATIC_DRAW); CDC* pDC=pWnd->GetDC();
CBrush BkBrush, DrawBrush;
BkBrush.CreateSolidBrush(m_BkColor); DrawBrush.CreateHatchBrush(m_DrawPattern, m_ForeColor);

具体要求: a. 工具选择按钮: 直线 矩形 b.画笔颜色设置 RGB设置,利用edit设置 c.笔刷设置 RGB设置,利用edit设置

3. 增加消息相应处理函数完成绘图功能。
具体要求: a. 工具选择按钮: 直线 矩形 b.画笔颜色设置 RGB设置,利用edit设置 宽度 样式 c.笔刷设置 RGB设置,利用edit设置

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

c++实验报告mfc简单画图程序)
4.改变填充色
在OnPaint()创建的画刷中,brush.CreateSolidBrush(m_fColor),颜色就是用m_fColor表示的,改变m_fColor即改变了画刷的颜色。选择菜单绘图→填充色,会弹出通过WM_COLORREF从系统中引入的颜色选择对话框,选择颜色后,点击确定则相应颜色值就赋给变量m_fColor,此时画刷的颜色就会发上变化。若不选择颜色,则默认填充色为黑色。
CPen *oldpen=dc.SelectObject(&pen);
dc.MoveTo(opoint);
dc.LineTo(cpoint);
dc.SelectObject(oldpen);
opoint=cpoint;
}
}
CView::OnMouseMove(nFlags, point);
}
void CDrawView::OnPaint()
2.选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
设计思路
1.对需要用到的变量进行初始化。
2.选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
线宽5
ID_W5
建立类向导,在视图类CDrawView中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图6所示。
图6 建立类向导
3.在相应消息函数处添加代码,实现其功能
建立类向导,在视图类CDrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。

实验一 MFC基本绘图

实验一 MFC基本绘图

数学与计算科学系学生实验报告实验课程名称:计算机图形学实验内容:实验一 MFC基本绘图系别:年级:专业班:学生姓名:学号:开课时间:年下学期一、实验要求1. 按照教材第40页2.2节所介绍的操作步骤,熟悉MFC应用程序的创建过程,并完成第50页的例2-5。

2.在上面程序的基础上,通过设置不同的画笔和画刷,至少实现8个不同图形的绘制,如:椭圆、矩形、实线、虚线、位图显示、五角星(多边形)、圆弧、扇形、Bezier曲线等等。

二、实验过程1.启动Visval 6.0++,创建MFC单文档工程。

2. 在MFC的OnDraw(CDC* pDC)中“ // TODO: add draw code for native data here”下进行编程。

3.建立直角坐标系,并标出x,y轴和原点O。

4.在坐标系里画图。

5.用图片填充背景时要先将图片导入MFCresources中。

6.画五角星时在头文件中加入以下代码:#include "math.h"#define PI 3.1415926#define Round(d) int(floor(d+0.5))三、程序代码void CMywork1View::OnDraw(CDC* pDC){CMywork1Doc* pDoc = GetDocument();ASSERT_V ALID(pDoc);// TODO: add draw code for native data hereCRect rect;//定义矩阵GetClientRect(&rect);//获得客户区矩阵pDC->SetMapMode(MM_ANISOTROPIC);//设置映射模式pDC->SetWindowExt(100,100);//设置窗口pDC->SetViewportExt(100,100);//设置视区:x轴水平向右为正,y轴垂直向上为正pDC->SetViewportOrg(rect.Width()/2,rect.Height()/2);//设置客户区中心为坐标系原点rect.OffsetRect(-rect.Width()/2,-rect.Height()/2);//客户区矩阵校正//建立坐标系CPen NewPen,*pOldPen;NewPen.CreatePen(PS_SOLID,1,RGB(0,255,0));//画实线,选择绿色画笔pOldPen=pDC->SelectObject(&NewPen);pDC->MoveTo(-rect.right,0); //自定义坐标轴pDC->LineTo(rect.right,0);pDC->MoveTo(0,-rect.bottom);pDC->LineTo(0,rect.bottom);pDC->MoveTo(rect.right,0); //画x轴的箭头pDC->LineTo(rect.right-10,-7);pDC->MoveTo(rect.right,0); //画x轴的箭头pDC->LineTo(rect.right-10,7);pDC->MoveTo(0,-rect.bottom); //画y轴的箭头pDC->LineTo(7,10-rect.bottom);pDC->MoveTo(0,-rect.bottom); //画y轴的箭头pDC->LineTo(-7,10-rect.bottom);pDC->TextOut(rect.right-15,5,"x"); //显示x轴pDC->TextOut(25,15-rect.bottom,"y"); //显示y轴pDC->TextOut(-15,10,"O"); //显示原点//直线---画实线1CPoint A(50,50),B(450,300);CPen NewPen1,*pOldPen1;NewPen1.CreatePen(PS_SOLID,1,RGB(0,225,225));//画实线,选择青色画笔pOldPen1=pDC->SelectObject(&NewPen1);pDC->MoveTo(A);pDC->LineTo(B);pDC->SelectObject(pOldPen1);pDC->TextOut(50,50,'A');pDC->TextOut(450,300,'B');pDC->TextOut(200,200,"实线");//直线---画虚线2CPoint C(300,150),D(600,100);CPen NewPen2,*pOldPen2;NewPen2.CreatePen(PS_DASH,1,RGB(225,0,0));//画虚线,选择红色画笔pOldPen2=pDC->SelectObject(&NewPen2);pDC->MoveTo(C);pDC->LineTo(D);pDC->SelectObject(pOldPen2);pDC->TextOut(300,150,'C');pDC->TextOut(600,100,'D');pDC->TextOut(450,100,"虚线");//画椭圆3rect.DeflateRect(100,50);CBrush * pOldBrush3;pOldBrush3=(CBrush *)pDC->SelectStockObject(NULL_BRUSH);//选择透明画刷pDC->Ellipse(rect);//绘制椭圆pDC->SelectObject(pOldBrush3);//画圆角矩形4CBrush NewBrush4,*pOldBrush4;NewBrush4.CreateSolidBrush(RGB(255,0,0));pOldBrush4=pDC->SelectObject(&NewBrush4);pDC->RoundRect(-400,-200,-50,-40,40,20);pDC->SelectObject(pOldPen);pDC->SelectObject(pOldBrush4);//画Bezier样条9CPoint pp[7];pp[0]=CPoint(20,-200);pp[1]=CPoint(90,-70);pp[2]=CPoint(220,-30);pp[3]=CPoint(250,-160);double a=(pp[3].y-pp[2].y)/(pp[3].x-pp[2].x);double x=270,y=a*(x-pp[3].x)+pp[3].y;pp[4]=CPoint(Round(x),Round(y));pp[5]=CPoint(480,-130);pp[6]=CPoint(400,-25);for(int j=0;j<7;j++){if(0==j)pDC->MoveTo(pp[j]);elsepDC->LineTo(pp[j]);pDC->Ellipse(pp[j].x-5,pp[j].y-5,pp[j].x+5,pp[j].y+5);//黑色实心圆绘制控制点}CPen NewPen9,*pOldPen9;NewPen9.CreatePen(PS_SOLID,3,RGB(255,0,0));//红色画笔绘制样条pOldPen9=pDC->SelectObject(&NewPen9);pDC->PolyBezier(pp,7);//绘制Bezier样条pDC->SelectObject(pOldPen9);pDC->TextOut(280,-100,"Bezier曲线");//绘制五角星6CPen penBlue(PS_SOLID,5,RGB(0,0,255));//定义五个像素宽的蓝色画笔CPen *pOldPen6=pDC->SelectObject(&penBlue);CBrush brushRed(RGB(255,0,0));//定义红色画笔CBrush * pOldBrush6=pDC->SelectObject(&brushRed);pDC->SetPolyFillMode(WINDING);//设置填充模式int r=200;//正五边形外接圆的半径CPoint p[5];//定义正五边形顶点数组double Beta=2*PI/5;//定义每个顶点的圆心角double Alpha=PI/10;//定义起始角for(int i=0;i<5;i++){p[i].x=Round(r*cos(i*Beta+Alpha));//计算正五边形顶点坐标p[i].y=Round(r*sin(i*Beta+Alpha));}CPoint v[5];//定义五角星顶点数组v[0]=p[0];v[1]=p[2];v[2]=p[4];v[3]=p[1];v[4]=p[3];//转储顶点pDC->Polygon(v,5);//绘制五角星pDC->SelectObject(pOldPen6);//恢复画笔pDC->SelectObject(pOldBrush6);//恢复画刷//画扇形7CBitmap NewBitmap7; CBrush NewBrush7,*pOldBrush7;NewBrush7.CreatePatternBrush(&NewBitmap7);//将背景图作为画刷填充扇形pOldBrush7=pDC->SelectObject(&NewBrush7);CPen *pOldPen7;pOldPen7=(CPen*)pDC->SelectStockObject(NULL_PEN);CPoint ld,rt,sp,ep;ld=CPoint(500,150),rt=CPoint(100,300);//第一个扇形的位置sp=CPoint(-100,-300),ep=CPoint(-500,-150);pDC->Pie(CRect(ld,rt),sp,ep);//画扇形函数CBrush Brush7;Brush7.CreateSolidBrush(RGB(0,255,255));//为下面的的扇形配青色pDC->SelectObject(&Brush7);ld=CPoint(-400,-170),rt=CPoint(-300,-130);//第二个扇形的位置sp=CPoint(-200,-100),ep=CPoint(-500,-100);pDC->Pie(CRect(ld,rt),sp,ep);//画获取像素图8srand((unsigned)time(NULL));//随机变量(随时间变化)COLORREF crColor;int m,n;for(n=50;n<100;n++)for(m=-100;m<-50;m++)pDC->SetPixelV(m,n,RGB(rand()%256,rand()%256,rand()%256));//生成随机像素点for(n=50;n<100;n++)for(m=-100;m<-50;m++){crColor=pDC->GetPixel(m,n);//获取原矩形区域的像素点pDC->SetPixelV(m-200,n+50,crColor);//用获取的像素点在y-90的位置生成原图}}四、实验结果。

mfc画图课程设计

mfc画图课程设计

mfc画图课程设计一、教学目标本课程旨在通过MFC画图的教学,使学生掌握MFC的基本使用方法和绘图原理,培养学生运用MFC进行绘图的能力。

知识目标:使学生了解MFC的基本概念和原理,掌握MFC的绘图方法和相关技术。

技能目标:培养学生运用MFC进行绘图的能力,能够独立完成简单的绘图程序设计。

情感态度价值观目标:培养学生对计算机编程的兴趣,增强学生解决问题的信心,培养学生的创新精神和团队协作意识。

二、教学内容本课程的教学内容主要包括MFC的基本概念、绘图原理和绘图方法。

1.MFC的基本概念:介绍MFC的定义、特点和应用领域。

2.绘图原理:讲解MFC绘图的基本原理,包括坐标系统、绘图函数和绘图模式。

3.绘图方法:介绍MFC绘图的基本方法,包括线条、矩形、椭圆、文字等的绘制。

三、教学方法本课程采用讲授法、实践法和讨论法进行教学。

1.讲授法:通过讲解MFC的基本概念、绘图原理和绘图方法,使学生掌握相关知识。

2.实践法:通过上机实践,使学生亲自操作MFC进行绘图,提高学生的动手能力。

3.讨论法:通过分组讨论,引导学生思考和解决问题,培养学生的团队协作能力和创新精神。

四、教学资源本课程的教学资源包括教材、多媒体资料和实验设备。

1.教材:选用《MFC画图教程》作为主要教材,辅助学生学习MFC的基本概念、绘图原理和绘图方法。

2.多媒体资料:制作PPT课件,生动形象地展示MFC的绘图效果,帮助学生更好地理解绘图原理和方法。

3.实验设备:提供计算机实验室,让学生能够亲自动手实践,提高运用MFC进行绘图的能力。

五、教学评估本课程的评估方式包括平时表现、作业和考试三个部分,以全面、客观、公正地评价学生的学习成果。

1.平时表现:评估学生在课堂上的参与程度、提问回答和团队协作等情况,以体现学生的学习态度和积极性。

2.作业:布置课后练习和项目任务,评估学生的绘图技巧和编程能力,以及学生对课堂知识的掌握程度。

3.考试:进行期末考试,以检验学生对MFC画图知识的综合运用能力。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

《MFC编程及应用》课程设计报告题目:简单画图形程序
学号:姓名:
指导老师:
时间:
评语:
程序设计步骤:
一、建立基于对话框的应用程序框架;
二、CMy0910200155Dlg类中关键新增变量的作用:
CPtrArray pta; //用于保存已绘图形的相关信息。

CMemoryNode *pmN; //指向CMemoryNode类的指针,程序运行过
程中动态保存对象信息。

CMemoryNode *pmn; //指向CMemoryNode类的指针,从文件中读
取信息时动态创建类的对象。

COLORREF m_CurrentBrushColor; //用于存放当前画刷的颜色。

COLORREF m_CurrentPenColor; //用于存放当前画笔的颜色。

int num; //用于存放从"Index.txt"文件中读取的数字。

int flag=0; //用于标识:当为1时,表示按下了”画图”按钮;当为2时,
表示按下了”撤消”按钮;当为3时,表示按下了”加载历史”
按钮,则从文件中读取信息。

int mark; //用于标识:当为0时,表示刚画过矩形;当为1时,表示
刚画过圆角矩形;当为2时,表示刚画过椭圆。

int index; //用于存放pta数组的容量。

int flag1=0; //用于标识,和flag搭配,用来处理多种情况下的窗口重绘
问题。

int ButtonState=0; //用于标识,是类CShow和类CMy0910200155Dlg
的一个接口,通过其值在1和0之间转换,来处理弹出式对
话框的初次绘制和移动时的重绘问题。

相关文档
最新文档