MFC画图程序.docx
- 文档编号:4930954
- 上传时间:2022-12-11
- 格式:DOCX
- 页数:28
- 大小:50.85KB
MFC画图程序.docx
《MFC画图程序.docx》由会员分享,可在线阅读,更多相关《MFC画图程序.docx(28页珍藏版)》请在冰豆网上搜索。
MFC画图程序
《基于MFC的简单画图程序》实训报告
班级:
姓名:
学号:
指导老师:
简单画图程序
1基本功能描述
(1)在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。
(2)选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。
(3)增添工具栏,设置绘制的图形形状,线色以及填充色,以及线宽等11个图形,可更方便地选择相应的功能。
2设计思路
(1)对需要用到的变量进行初始化。
(2)选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。
选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。
(3)鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。
(4)选择图形或其它属性,可进行下一次绘制。
3.关键功能实现
当画图完毕后,可以实现图画的保存和打开。
4.截图
5.源代码:
头文件
//Draw.h:
mainheaderfilefortheDRAWapplication
//
#if!
defined(AFX_DRAW_H__378053F6_088F_44B7_A578_9738CBEED57F__INCLUDED_)
#defineAFX_DRAW_H__378053F6_088F_44B7_A578_9738CBEED57F__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#ifndef__AFXWIN_H__
#errorinclude'stdafx.h'beforeincludingthisfileforPCH
#endif
#include"resource.h"//mainsymbols
/////////////////////////////////////////////////////////////////////////////
//CDrawApp:
//SeeDraw.cppfortheimplementationofthisclass
//
classCDrawApp:
publicCWinApp
{
public:
CDrawApp();
DECLARE_MESSAGE_MAP()
};
//DrawDoc.h:
interfaceoftheCDrawDocclass
//
/////////////////////////////////////////////////////////////////////
#if!
defined(AFX_DRAWDOC_H__32E35C56_2489_4948_8AD0_DF51F96B20E1__INCLUDED_)
#defineAFX_DRAWDOC_H__32E35C56_2489_4948_8AD0_DF51F96B20E1__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#include"Line.h"
#include
classCDrawDoc:
publicCDocument
{
protected:
//createfromserializationonly
CDrawDoc();
DECLARE_DYNCREATE(CDrawDoc)
public:
public:
public:
intGetNumLines();
voidAddLine(CPointpt1,CPointpt2);
CLine*GetLine(intnIndex);
virtual~CDrawDoc();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
CTypedPtrArray
protected:
DECLARE_MESSAGE_MAP()
};
//DrawView.h:
interfaceoftheCDrawViewclass
//
/////////////////////////////////////////////////////////////////////////////
#if!
defined(AFX_DRAWVIEW_H__537E5681_BEE5_44E4_9C81_F607277F4415__INCLUDED_)
#defineAFX_DRAWVIEW_H__537E5681_BEE5_44E4_9C81_F607277F4415__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
classCDrawView:
publicCScrollView
{
protected:
//createfromserializationonly
CDrawView();
DECLARE_DYNCREATE(CDrawView)
public:
CDrawDoc*GetDocument();
COLORREFm_nColor;
COLORREFm_fColor;
CPointcpoint;
CPointopoint;
BOOLm_Down;
intw;
intshape;
public:
OnPreparePrinting(CPrintInfo*pInfo);
virtualvoidOnBeginPrinting(CDC*pDC,CPrintInfo*pInfo);
virtualvoidOnEndPrinting(CDC*pDC,CPrintInfo*pInfo);
public:
virtual~CDrawView();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
protected:
HCURSORm_hCross;
boolm_bDragging;
CPointm_ptBegin;
afx_msgvoidOnPaint();
afx_msgvoidOnhuifu();
DECLARE_MESSAGE_MAP()
};
#ifndef_DEBUG//debugversioninDrawView.cpp
inlineCDrawDoc*CDrawView:
:
GetDocument()
{return(CDrawDoc*)m_pDocument;}
#endif
//Line.h:
interfacefortheCLineclass.
//
/////////////////////////////////////////////////////////////////////
#if!
defined(AFX_LINE_H__1DE25D19_06FE_4CF3_A60F_A5072A8E61A7__INCLUDED_)
#defineAFX_LINE_H__1DE25D19_06FE_4CF3_A60F_A5072A8E61A7__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
classCLine:
publicCObject
{
public:
voidDrawLine(CDC*pDC);
CLine(CPointpt1,CPointpt2);
CLine();
virtual~CLine();
voidSerialize(CArchive&ar);//类CLine的序列化函数
DECLARE_SERIAL(CLine)//声明序列化类CLine
private:
CPointm_pt2;
CPointm_pt1;
};
#endif
//MainFrm.h:
interfaceoftheCMainFrameclass
//
/////////////////////////////////////////////////////////////////////////////
#if!
defined(AFX_MAINFRM_H__0CDCF56E_36A1_43BE_9370_67E1222CD397__INCLUDED_)
#defineAFX_MAINFRM_H__0CDCF56E_36A1_43BE_9370_67E1222CD397__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
classCMainFrame:
publicCFrameWnd
{
protected:
//createfromserializationonly
CToolBarm_drawToolBar;
CMainFrame();
DECLARE_DYNCREATE(CMainFrame)
public:
public:
virtual~CMainFrame();
#ifdef_DEBUG
virtualvoidAssertValid()const;
virtualvoidDump(CDumpContext&dc)const;
#endif
protected:
CStatusBarm_wndStatusBar;
CToolBarm_wndToolBar;
protected:
DECLARE_MESSAGE_MAP()
};
//{{NO_DEPENDENCIES}}
//MicrosoftDeveloperStudiogeneratedincludefile.
//UsedbyDraw.rc
//
#defineIDD_ABOUTBOX100
#defineIDR_MAINFRAME128
#defineIDR_DRAWTYPE129
#defineIDR_TOOLBAR1130
#defineID_LINE32771
#defineID_RECT32772
#defineID_ELLIPSE32773
#defineID_W132774
#defineID_W232775
#defineID_W332776
#defineID_W432777
#defineID_W532778
#defineID_COLOR32780
#defineID_FILLCOLOR32781
#defineID_huifu32786
//Nextdefaultvaluesfornewobjects
//
#ifdefAPSTUDIO_INVOKED
#ifndefAPSTUDIO_READONLY_SYMBOLS
#define_APS_3D_CONTROLS1
#define_APS_NEXT_RESOURCE_VALUE132
#define_APS_NEXT_COMMAND_VALUE32787
#define_APS_NEXT_CONTROL_VALUE1000
#define_APS_NEXT_SYMED_VALUE101
#endif
#endif
//stdafx.h:
includefileforstandardsystemincludefiles,
//orprojectspecificincludefilesthatareusedfrequently,but
//arechangedinfrequently
#if!
defined(AFX_STDAFX_H__65BC9533_FB09_4FF8_B4BB_2E1D9BD6488A__INCLUDED_)
#defineAFX_STDAFX_H__65BC9533_FB09_4FF8_B4BB_2E1D9BD6488A__INCLUDED_
#if_MSC_VER>1000
#pragmaonce
#endif//_MSC_VER>1000
#defineVC_EXTRALEAN//Excluderarely-usedstufffromWindowsheaders
#include
#include
#include
#include
#ifndef_AFX_NO_AFXCMN_SUPPORT
#include
#endif
源程序文件
//Draw.cpp:
Definestheclassbehaviorsfortheapplication.
//
#include"stdafx.h"
#include"Draw.h"
#include"MainFrm.h"
#include"DrawDoc.h"
#include"DrawView.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
//CDrawApp
BEGIN_MESSAGE_MAP(CDrawApp,CWinApp)
ON_COMMAND(ID_FILE_NEW,CWinApp:
:
OnFileNew)
ON_COMMAND(ID_FILE_OPEN,CWinApp:
:
OnFileOpen)
ON_COMMAND(ID_FILE_PRINT_SETUP,CWinApp:
:
OnFilePrintSetup)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
//CDrawAppconstruction
CDrawApp:
:
CDrawApp()
{
}
/////////////////////////////////////////////////////////////////////////////
CDrawApptheApp;
/////////////////////////////////////////////////////////////////////////////
BOOLCDrawApp:
:
InitInstance()
{
AfxEnableControlContainer();
#ifdef_AFXDLL
Enable3dControls();
#else
Enable3dControlsStatic();
#endif
SetRegistryKey(_T("LocalAppWizard-GeneratedApplications"));
LoadStdProfileSettings();
.
CSingleDocTemplate*pDocTemplate;
pDocTemplate=newCSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CDrawDoc),
RUNTIME_CLASS(CMainFrame),//mainSDIframewindow
RUNTIME_CLASS(CDrawView));
AddDocTemplate(pDocTemplate);
CCommandLineInfocmdInfo;
ParseCommandLine(cmdInfo);
if(!
ProcessShellCommand(cmdInfo))
returnFALSE;
m_pMainWnd->ShowWindow(SW_SHOW);
m_pMainWnd->UpdateWindow();
m_pMainWnd->SetWindowText("简单的绘图程序");
returnTRUE;
}
/////////////////////////////////////////////////////////////////////////////
classCAboutDlg:
publicCDialog
{
public:
CAboutDlg();
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg:
:
CAboutDlg():
CDialog(CAboutDlg:
:
IDD)
{
}
voidCAboutDlg:
:
DoDataExchange(CDataExchange*pDX)
{
CDialog:
:
DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg,CDialog)
END_MESSAGE_MAP()
voidCDrawApp:
:
OnAppAbout()
{
CAboutDlgaboutDlg;
aboutDlg.DoModal();
}
//DrawDoc.cpp:
implementationoftheCDrawDocclass
//
#include"stdafx.h"
#include"Draw.h"
#include"DrawDoc.h"
#ifdef_DEBUG
#definenewDEBUG_NEW
#undefTHIS_FILE
staticcharTHIS_FILE[]=__FILE__;
#endif
#include"Line.h"
#include
/////////////////////////////////////////////////////////////////////////////
IMPLEMENT_DYNCREATE(CDrawDoc,CDocument)
BEGIN_MESSAGE_MAP(CDrawDoc,CDocument)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
CDrawDoc:
:
CDrawDoc()
{
}
CDrawDoc:
:
~CDrawDoc()
{
}
BOOLCDrawDoc:
:
OnNewDocument()
{
if(!
CDocument:
:
OnNewDocument())
returnFALSE;
returnTRUE;
}
/////////////////////////////////////////////////////////////////////////////
voidCDrawDoc:
:
Serialize(CArchive&ar)
{
if(ar.IsStoring())
{
m_LineArray.Serialize(ar);//调用CObArray类的序列化函数
}
else
{
m_LineArray.Serialize(ar);//调用CObArray类的序列化函数
}
}
/////////////////////////////////////////////////////////////////////////////
#ifdef_DEBUG
voidCDrawDoc:
:
AssertValid()const
{
CDocument:
:
AssertValid();
}
voidCDrawDoc:
:
Dump(CDumpContext&dc)const
{
CDocument:
:
Dump(dc);
}
#endif
/////////////////////////////////////////////////////////////////////////////
//CDrawDoccommands
CLine*CDrawDoc:
:
GetLine(intnIndex)
{
if(nIndex<0||nIndex>m_LineArray.GetUpperBound())
returnNULL;
returnm_LineArray.GetAt(nIndex);
}
voidCDrawDoc:
:
AddLine(CPointpt1,CPointpt2)
{
CLine*pLine=newCLine(pt1,pt2);
m_LineArray.Add(pLine);
SetModifiedFlag();//设置文档修改标
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 画图 程序