C++实验报告(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)函数。

cpp报告实验七_MFC_控件编程实验

cpp报告实验七_MFC_控件编程实验

实验七 MFC 控件编程实验一、实验目的(1) 熟悉Visual Studio 开发环境;(2) 掌握类向导的使用方法,熟练使用类向导进行消息映射,添加类的数据成员;(3) 掌握MFC 环境下标准控件的使用方法。

二、实验内容创建基于对话框的应用程序,在图形显示区绘制一个矩形并用单色画刷填充矩形内部。

通过滚动条控件设置填充颜色,并在编辑框中显示颜色的RGB值,通过单选按钮可以设置矩形的边框线型,“显示图形”复选框可以控制是否显示矩形。

设置完成后,单击“显示”按钮在“图形显示区”显示新的绘图效果。

单击“退出”按钮退出程序。

三、实验结果1 列表说明各个控件的属性设置,列出控件功能的实现代码;程序代码:DemoDlg.cpp:#include "stdafx.h"#include "Demo.h"#include "DemoDlg.h"#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endifclass CAboutDlg : public CDialog{public:CAboutDlg();enum { IDD = IDD_ABOUTBOX };protected:virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV supportprotected:DECLARE_MESSAGE_MAP()};CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD){}void CAboutDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);}BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)END_MESSAGE_MAP()CDemoDlg::CDemoDlg(CWnd* pParent /*=NULL*/): CDialog(CDemoDlg::IDD, pParent), m_nLineStyle(0), m_nShow(TRUE), m_szRGB(_T("")){m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);}void CDemoDlg::DoDataExchange(CDataExchange* pDX){CDialog::DoDataExchange(pDX);DDX_Radio(pDX, IDC_SOLID, m_nLineStyle);DDX_Check(pDX, IDC_SHOW, m_nShow);DDX_Control(pDX, IDC_RED, m_Red);DDX_Control(pDX, IDC_GREEN, m_Green);DDX_Control(pDX, IDC_BLUE, m_Blue);DDX_Text(pDX, IDC_RGB, m_szRGB);}BEGIN_MESSAGE_MAP(CDemoDlg, CDialog)ON_WM_SYSCOMMAND()ON_WM_PAINT()ON_WM_QUERYDRAGICON()ON_BN_CLICKED(IDC_START, OnStart)ON_BN_CLICKED(IDC_STOP, OnStop)ON_WM_TIMER()ON_WM_HSCROLL()ON_BN_CLICKED(IDC_DOT, &CDemoDlg::OnBnClickedDot)ON_BN_CLICKED(IDC_SHOW, &CDemoDlg::OnBnClickedShow)ON_BN_CLICKED(IDC_SOLID, &CDemoDlg::OnBnClickedSolid)ON_BN_CLICKED(IDC_DASH, &CDemoDlg::OnBnClickedDash)ON_NOTIFY(NM_THEMECHANGED, IDC_RED, &CDemoDlg::OnNMThemeChangedRed) END_MESSAGE_MAP()BOOL CDemoDlg::OnInitDialog(){CDialog::OnInitDialog();ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);ASSERT(IDM_ABOUTBOX < 0xF000);CMenu* pSysMenu = GetSystemMenu(FALSE);if (pSysMenu != NULL){CString strAboutMenu;strAboutMenu.LoadString(IDS_ABOUTBOX);if (!strAboutMenu.IsEmpty()){pSysMenu->AppendMenu(MF_SEPARATOR);pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);}}SetIcon(m_hIcon, TRUE); // Set big iconSetIcon(m_hIcon, FALSE); // Set small iconm_Red.SetScrollRange(0, 255);m_Green.SetScrollRange(0, 255);m_Blue.SetScrollRange(0, 255);m_Red.SetScrollPos(100);m_Green.SetScrollPos(100);m_Blue.SetScrollPos(100);m_szRGB = _T("RGB(100,100,100)");UpdateData(FALSE);return TRUE;}void CDemoDlg::OnSysCommand(UINT nID, LPARAM lParam){if ((nID & 0xFFF0) == IDM_ABOUTBOX){CAboutDlg dlgAbout;dlgAbout.DoModal();}else{CDialog::OnSysCommand(nID, lParam);}}void CDemoDlg::OnPaint(){CPaintDC dc(this);CPen Pen2,*pOldPen;CBrush Brush, *poldbrush;UpdateData(TRUE);switch (m_nLineStyle){case 0:Pen2.CreatePen(PS_SOLID, 3, RGB(255,0,0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 1:Pen2.CreatePen(PS_DASH, 1, RGB(255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 2:Pen2.CreatePen(PS_DASHDOT, 1, RGB(255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;case 3:Pen2.CreatePen(PS_DASHDOTDOT, 1, RGB( 255, 0, 0));Brush.CreateSolidBrush(RGB(m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos()));break;}if (m_nShow == true){dc.SelectObject(&Brush);poldbrush = dc.SelectObject(&Brush);dc.SelectObject(&Pen2);pOldPen = dc.SelectObject(&Pen2);dc.Rectangle(20, 30, 410, 210);dc.SelectObject(pOldPen);dc.SelectObject(poldbrush);}}HCURSOR CDemoDlg::OnQueryDragIcon(){return (HCURSOR) m_hIcon;}void CDemoDlg::OnStart(){SetTimer(1,500,NULL);}void CDemoDlg::OnStop(){KillTimer(1);exit(0);}void CDemoDlg::OnTimer(UINT nIDEvent){CRect rt(15, 20, 420, 220);InvalidateRect(&rt);CDialog::OnTimer(nIDEvent);}void CDemoDlg::OnHScroll(UINT nSBCode, UINT nPos,CScrollBar* pScrollBar){switch (nSBCode){case SB_THUMBTRACK:pScrollBar->SetScrollPos(nPos);break;case SB_LINELEFT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 5);break;case SB_LINERIGHT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 5);break;case SB_PAGELEFT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() - 20);break;case SB_PAGERIGHT:pScrollBar->SetScrollPos(pScrollBar->GetScrollPos() + 20);break;}m_szRGB.Format("RGB(%d,%d,%d)",m_Red.GetScrollPos(),m_Green.GetScrollPos(),m_Blue.GetScrollPos());UpdateData(FALSE);CDialog::OnHScroll(nSBCode, nPos, pScrollBar);}void CDemoDlg::OnBnClickedDot(){}void CDemoDlg::OnBnClickedShow(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnBnClickedSolid(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnBnClickedDash(){// TODO: 在此添加控件通知处理程序代码}void CDemoDlg::OnNMThemeChangedRed(NMHDR *pNMHDR, LRESULT *pResult){*pResult = 0;}g::OnHScroll(nSBCode, nPos, pScrollBar);}DemoDlg.h:#include "afxwin.h"#if !defined(AFX_DEMODLG_H__C9F67558_0B42_4FF2_B643_A3FB1D923475__INCLUDED_) #define AFX_DEMODLG_H__C9F67558_0B42_4FF2_B643_A3FB1D923475__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000class CDemoDlg : public CDialog{public:CDemoDlg(CWnd* pParent = NULL); // standard constructorenum { IDD = IDD_DEMO_DIALOG };protected:virtual void DoDataExchange(CDataExchange* pDX);protected:HICON m_hIcon;virtual BOOL OnInitDialog();afx_msg void OnSysCommand(UINT nID, LPARAM lParam);afx_msg void OnPaint();afx_msg HCURSOR OnQueryDragIcon();afx_msg void OnStart();afx_msg void OnStop();afx_msg void OnTimer(UINT nIDEvent);DECLARE_MESSAGE_MAP()public:int m_nLineStyle;BOOL m_nShow;CScrollBar m_Red;CScrollBar m_Green;CScrollBar m_Blue;afx_msg void OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar);CString m_szRGB;afx_msg void OnBnClickedDot();afx_msg void OnBnClickedShow();afx_msg void OnBnClickedSolid();afx_msg void OnBnClickedDash();afx_msg void OnNMThemeChangedRed(NMHDR *pNMHDR, LRESULT *pResult); };#endif2 运行结果3 总结类向导的功能和使用方法;类向导功能:它为VC提供了一个管理类的一个快捷的界面和快捷的方式,使我们能方便的管理成员变量、成员函数、消息映射等,而不用手动修改单个的代码文件.使用方法:在类视图选中要操作的类(DemoDlg),点击右键弹出类向导,在类向导中选中要操作的命令、消息或成员变量,点击添加处理程序或添加变量,然后在代码中相应位置编辑所需代码。

c面向对象程序设计MFC简单计算器实验报告

c面向对象程序设计MFC简单计算器实验报告

c面向对象程序设计M F C简单计算器实验报告Standardization of sany group #QS8QHH-HHGX8Q8-GNHHJ8-HHMHGN#计算机与信息工程学院《程序设计基础》课程设计报告题目名称:60.编写一个能实现简单功能的计算器学生姓名:刘沛东学生学号:专业班级:电子信息工程(1)班指导教师:高攀1 课程设计的题目编写一个能实现简单功能的计算器2 题目要求1. 有一个计算器图形。

2. 能实现加、减、乘、除及乘方的运算。

3. 当输入题目时,屏幕上要在指定位置上显示出相应的题目内容,且相应的数字键要改变颜色例如:输入数字1 时,在计算器图形上的1键变为红色。

4. 屏幕、图形颜色、形状自定3 总体设计总体框架图1 系统框架系统功能说明在VC++中绘制计算器界面,各控件的设置对0~9控件设定相应的ID和其他属性:图2 “1”控件设置对“+、-、*、\”控件设定相应的ID和其他属性:图2 “+”控件设置对其它控件设定相应的ID和其他属性:图3 其它控件设置主要使用到Layout菜单中的Align功能对各个按钮进行对其,使界面更加整洁。

拖出的控件有上面的一个Edit控件用于显示数字,Button控件用于处理鼠标的消息。

4 程序详细设计系统主调模块图5 程序流程图各模块详细设计建立的变量,控件的命名,对应的消息处理函数对应表double poz; 按钮的处理函数void CCalcDlg::OnPt(){point_flag=TRUE; && buffer[i+1]==0)之前那位}m_Dis=strtod(buffer,NULL);整个大的程序的实现分8个功能,每个功能都通过一个相应的函数来实现.在调试时分别进行调试,使得调试更方便些.在编写各个函数只是按着题目要求的去完成,后来经指导老师指导后,发现了很多自己欠缺的地方,又一次将程序整体进行调试.最后把程序完善了许多。

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绘图程序实验报告

《面向对象课程设计》实验报告题目学生姓名学号专业班级指导老师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.选择“随手画”,用鼠标就可以在试图中随手画画。

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画简单点线面界面实验报告

}
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

基于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画图实验报告

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

VC++程序设计实验报告一、实验目的掌握MFC编程二、实验内容用MFC向导创建单文档应用程序,一个简单的画图程序。

⏹使用C++语言实现⏹使用VC++6.0集成开发环境开发⏹使用MFC应用程序开发框架三、实验步骤⏹基本功能描述1. 打开exe文件,在绘图下拉菜单中可分别设置绘制的图形形状,如直线、曲线、矩形及椭圆,线宽选项,有1-6可供选择,线型选项有实线、虚线、点线和点段线供设置,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。

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

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

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

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

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

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

⏹软件设计A 设计步骤1.创建单文档创建一个MFC AppWizard[exe]工程,命名为“Draw”,如图1所示,并创建单文档,如图2所示。

创建成功后,系统自动生成相应的类,如图3所示。

图1 创建工程图2 创建单文档图3 生成类2.编辑菜单添加需要的菜单项,如图4所示;并在菜单的属性中设定好所对应的ID,如图5所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符选项即可)。

图4 添加菜单项图5 设置菜单ID表1 菜单项对应ID 建立类向导,在视图类CDrawView 中,对各菜单项添加对应的COMMAND 消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI 消息函数,如图6所示。

菜单名ID 菜单名 ID 菜单名 ID直线ID_LINE 线宽1 ID_W1 实线 ID_SOLID 矩形ID_RECT 线宽2 ID_W2 虚线 ID_DASH 椭圆ID_ELLIPS E 线宽3 ID_W3 点线 ID_DOT 颜色ID_COLOR 线宽4 ID_W4 点段线 ID_DASHDOT 填充色ID_FILLCO LOR 线宽5 ID_W5图6 建立类向导3.在相应消息函数处添加代码,实现其功能建立类向导,在视图类CDrawView中,添加WM_PAINT消息,以及WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码。

B 关键功能实现1.选择要绘制的图形在直线、矩形以及椭圆的消息处理函数里为shape分别赋值为1,2,3,在OnPaint()函数里添加3个if语句的代码来这实现这三个图形的绘制:当选择画直线时,shape=1,则执行绘制直线代码,当选择画矩形时,shape =2,则执行绘制矩形的代码,当性选择画椭圆时,shape=3,则执行绘制椭圆的代码。

2.改变线宽在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w, m_nColor),线宽处用w表示,则改变w的值即改变了画笔的粗细。

选择菜单绘图→线宽选择划线宽度值,此时所选的线宽值就赋给线宽变量w。

若不选择线宽值,则w=1(即默认线宽值为1)。

3.改变线型在OnPaint()创建的画笔中,pen.CreatePen(penstyle,w, m_nColor),线型处用penstyle表示,则改变penstyle的值即改变了画笔的类型。

选择菜单绘图→线型选择线型,此时所选的线型就赋给线型变量penstyle。

若不选择线型值,则penstyle=ID_SOLID(即默认线型为实线)。

4.改变线色在OnPaint()创建的画笔中,pen.CreatePen(penstyle,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()函数。

四、结果及源代码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);//初始状态时填充色penstyle=PS_SOLID;//初始化线型为实线}2.形状函数void CDrawView::OnLine(){shape=1;void CDrawView::OnRect(){shape=2;}void CDrawView::OnEllipse() {shape=3;}3.线宽改变函数void CDrawView::OnW1(){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.线型选择函数void CDrawView::OnSolid() {penstyle=PS_SOLID;}void CDrawView::OnDash(){penstyle=PS_DASH;}void CDrawView::OnDot()penstyle=PS_DOT;}void CDrawView::OnDashdot(){penstyle=PS_DASHDOT;}5.颜色选择函数void CDrawView::OnColor(){CColorDialog Color;//创建颜色对话框if(Color.DoModal()==IDOK)//如果用户点击OK按钮{m_nColor=Color.GetColor();//更改颜色,把颜色赋到m_nColor }}6.填充色选择函数void CDrawView::OnFullcolor(){CColorDialog FullColor;//创建颜色对话框if(FullColor.DoModal()==IDOK)//如果用户点击OK按钮{m_fColor=FullColor.GetColor();//更改颜色,把颜色赋到m_nColor }}7.单击、移动、绘画函数void CDrawView::OnLButtonDown(UINT nFlags, CPoint point){m_Down=TRUE; //鼠标按下SetCapture(); //获取坐标opoint=point; //把鼠标所在坐标赋给起点坐标opointReleaseCapture(); //释放坐标CView::OnLButtonDown(nFlags, point);}void CDrawView::OnLButtonUp(UINT nFlags, CPoint point){m_Down=FALSE; //鼠标不按下,即弹起Invalidate(0); //刷新CView::OnLButtonUp(nFlags, point);}void CDrawView::OnMouseMove(UINT nFlags, CPoint point){if(m_Down) //如果鼠标按下{cpoint=point; //把鼠标所在点坐标赋给终点坐标cpointCClientDC dc(this);if(4==shape)//画曲线{CPen pen(PS_SOLID,10,RGB(255,0,0));CPen *oldpen=dc.SelectObject(&pen);dc.MoveTo(opoint);dc.LineTo(cpoint);dc.SelectObject(oldpen);opoint=cpoint;}}CView::OnMouseMove(nFlags, point);}void CDrawView::OnPaint(){CPaintDC dc(this); // device context for paintingCPen pen; //定义画笔CBrush brush; //定义画刷pen.CreatePen(penstyle,w, m_nColor); //创建画笔brush.CreateSolidBrush(m_fColor); //创建画刷dc.SelectObject(&pen); //获取画笔dc.SelectObject(&brush); //获取画刷if(1==shape)//画直线{dc.MoveTo(opoint.x,opoint.y);dc.LineTo(cpoint.x,cpoint.y); //绘制直线,从opoint到cpoint连线}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);//绘制椭圆}}8.菜单勾选函数void CDrawView::OnUpdateLine(CCmdUI* pCmdUI){pCmdUI->SetCheck(shape==1); //shape为1时,直线选项前打上勾}void CDrawView::OnUpdateRect(CCmdUI* pCmdUI){pCmdUI->SetCheck(shape==2); //shape为2时,直线选项前打上勾}void CDrawView::OnUpdateEllipse(CCmdUI* pCmdUI){pCmdUI->SetCheck(shape==3); //shape为3时,直线选项前打上勾}void CDrawView::OnUpdateW1(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==1); //当线宽为1时,此选项前标有圆点}void CDrawView::OnUpdateW2(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==2); //当线宽为2时,此选项前标有圆点}void CDrawView::OnUpdateW3(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==3); //当线宽为3时,此选项前标有圆点}void CDrawView::OnUpdateW4(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==4); //当线宽为4时,此选项前标有圆点}void CDrawView::OnUpdateW5(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==5); //当线宽为5时,此选项前标有圆点}void CDrawView::OnUpdateW6(CCmdUI* pCmdUI){pCmdUI->SetRadio(w==6); //当线宽为6时,此选项前标有圆点}void CDrawView::OnUpdateSolid(CCmdUI* pCmdUI){pCmdUI->SetRadio(penstyle==PS_SOLID); //当线型为实线时,此选项前标有圆点}void CDrawView::OnUpdateDash(CCmdUI* pCmdUI){pCmdUI->SetRadio(penstyle==PS_DASH); //当线型为虚线时,此选项前标有圆点}void CDrawView::OnUpdateDot(CCmdUI* pCmdUI){pCmdUI->SetRadio(penstyle==PS_DOT); //当线型为点线时,此选项前标有圆点}void CDrawView::OnUpdateDashdot(CCmdUI* pCmdUI){pCmdUI->SetRadio(penstyle==PS_DASHDOT); //当线型为点段线时,此选项前标有圆点}如有侵权请联系告知删除,感谢你们的配合!。

相关文档
最新文档