实验八 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简单绘图程序报告简单绘图程序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绘图程序实验报告
《面向对象课程设计》实验报告题目学生姓名学号专业班级指导老师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 一个简单的绘图程序涉及到的知识点: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画图实验报告
// 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鼠标画线试验演示
鼠标画线试验演示一、创建工程1、按照下图的设置来新建一个新的工程,工程名(Project Name)为“Draw”。
2、选择创建的应用程序类型为“Single documen”(单文档程序)然后按照缺省的方式进行设置,直到生成源程序(如下图所示)。
二、添加变量1、按照下图所示,在CDrawDoc类中添加三个成员变量:CPoint m_point1;CPoint m_point2;BOOL m_bLBtnDown;2、在CDrawDoc类的构造函数中对变量进行初始化:m_point1.x = 50;m_point1.y = 50;m_point2.x = 100;m_point2.y = 100;m_bLBtnDown = FALSE;三、完成画线操作1、在CDrawView类的OnDraw(CDC *pDC) 函数种添加如下代码:pDC->MoveTo(pDoc->m_point1.x, pDoc->m_point1.y);pDC->LineTo(pDoc->m_point2.x, pDoc->m_point2.y);此时可以编译运行程序,看运行结果。
四、实现鼠标画图1、添加关于鼠标消息响应得函数,按下图所示:在CDrawView类上点击鼠标右键,探出右键菜单,选择其中的“Add Windows Message Handler…”选项。
将弹出下面的窗口双击其中的WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE将它们选到右侧窗口,然后点击“OK”按钮。
将在CDrawView类中生成三个新的函数(如下图):2、编写鼠标左键按下的响应函数(OnLButtonDown)添加的代码为:CDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc->m_point1.x = point.x;pDoc->m_point1.y = point.y;pDoc->m_bLBtnDown = TRUE;3、编写鼠标左键弹起的响应函数(OnLButtonUp)添加的代码为:CDrawDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);pDoc->m_point2.x = point.x;pDoc->m_point2.y = point.y;pDoc->m_bLBtnDown = FALSE;Invalidate( );完成后编译运行程序,看运行结果。
08第八章 MFC程序设计-鼠标和键盘
鼠标和键盘
作 者:李 季
主要内容
鼠标消息分类 客户区鼠标消息 非客户区鼠标消息 光标 键盘消息
鼠标消息分类ຫໍສະໝຸດ 客户区鼠标消息 非客户区鼠标消息
客户区鼠标消息
消 息 发送条件
鼠标左键被按下 鼠标左键被释放 鼠标左键被双击 鼠标中间键被按下 鼠标中间键被释放 鼠标中间键被双击 鼠标右键被按下 WM_LBUTTONDOWN WM_LBUTTONUP WM_LBUTTONDBLCLK WM_MBUTTONDOWN WM_MBUTTONUP WM_MBUTTONDBLCLK WM_RBUTTONDOWN
–
wc.Restore();
如果想自定义表现形式,可以重载 CWinApp::DoWaitCursor
键盘消息
击键消息
–
–
WM_KEYDOWN、WM_KEYUP WM_SYSKEYDOWN、WM_SYSKEYUP Afx_msg void OnMsgName(UINT nChar, UINT nRepCnt, UINT nFlags)
Shift
Ctrl Alt
键盘消息
虚拟键代码 VK_PAUSE VK_ESCAPE VK_SPACE VK_PRIOR VK_NEXT VK_END VK_HOME VK_INSERT VK_DELETE 相应键 Psuse Esc Spacebar Page Up Page Down End Home Insert Delete
光标
注册WNDCLASS,指定目标光标类型为 类光标 CString strWndClass = AfxRegisterWndClass(0, AfxGetApp()-> LoadStandardCursor(IDC_CROSS), (HBRUSH)(COLOR_WINDOW + 1), AfxGetApp()->LoadSteandardIcon (IDI_WINLOGO)); Create(strWndClass, _T(“Mouse Capture Demo(Capture Enabled)”));
MFC实现简单画图形程序
《MFC编程及应用》课程设计报告题目:简单画图形程序学号:姓名:指导老师:时间:评语:程序设计步骤:一、 建立基于对话框的应用程序框架;二、 CMy0910200155Dlg 类中关键新增变量的作用:CPtrArray pta; //用于保存已绘图形的相关信息。
CMemoryNode *pmN; //指向CMemoryNode 类的指针,程序运行过程中动态保存对象信息。
CMemoryNode CMemoryNode *pmn; *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 的成员变量,的成员变量,分别用来保存分别用来保存 绘图时画刷颜色,画笔颜色和形状。
MFC鼠标拖动效果编程
代码主要在三处地方修改了:
第一处:VIEW类中设置私有变量(VIEW类.h文件中)
private:
BOOL m_startRect; //绘制矩形框标志
CPoint m_startPoint; //矩形框开始点
CPoint m_OldPoint; //矩形框终点(但是它是上一次的点,所以这里用了Old标识)
//这样,如果连续绘制两次的话,就可以恢复原来屏幕的颜色了(如下)
//但是,这里的连续两次绘制却不是在一次消息响应中完成的
//而是在第一次拖动响应的绘制可以显示(也就是看到的),第二次拖动绘制实现擦出(也就看不到了)
dc.SetROP2(R2_NOT); //此为关键!!!如果设置为R2_XORPEN 则为画笔的反色
CView::OnLButtonUp(nFlags, point);
}
//消隐最后的一个矩形(其原理跟拖动时矩形框绘制原理相同)
CClientDC dc(this);
dc.SetROP2(R2_NOT);
dc.SelectStockObject(NULL_BRUSH);
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.SelectStockObject(NULL_BRUSH); //不使用画刷
if (TRUE == m_startRect) //根据是否有单击判断是否可以画矩形
{
dc.Rectangle(CRect(m_startPoint,m_OldPoint));
dc.Rectint));
【MFC鼠标拖动效果编程 】
要实现的功能实际上很简单,一般人都用到见惯不惯了,但是实现起来还是有点意思的。
c++实验报告mfc简单画图程序)
在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消息,并在其中添加相应的代码。
Visual C++ MFC的图形绘制
实验2 Visual C++ MFC的图形绘制一、实验目的1.了解Windows应用程序的特点。
2.掌握MFC类库中CDC类绘图函数的使用方法。
3.使用VisualC++开发简单Windows程序。
二、实验内容利用VisualC++6.0设计一个简易绘图板,完成简单的绘图功能。
三、实验指导1. 带菜单界面制作新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。
为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。
当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。
添加的六个菜单项的ID及名称如表1所示。
然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。
在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。
因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:private: UINT m_nDrawType;接着,在视类的构造函数中将此变量初始化为0,程序代码如下:CGraphicView::CGraphicView(){// TODO: add construction code herem_nDrawType=0;}利用switch/case语句,来分别完成相应图形的绘制。
当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。
程序代码如下:void CGraphicView::OnDot(){// TODO: Add your command handler code herem_nDrawType=1;}void CGraphicView::OnLine(){// TODO: Add your command handler code herem_nDrawType=2;}void CGraphicView::OnRectangle(){// TODO: Add your command handler code herem_nDrawType=3;}void CGraphicView::OnEllipse(){// TODO: Add your command handler code herem_nDrawType=4;}void CGraphicView::OnShanxing(){// TODO: Add your command handler code herem_nDrawType=5;}void CGraphicView::OnLianxuxian(){// TODO: Add your command handler code herem_nDrawType=6;}2. 点、直线、矩形、椭圆的绘制对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。
mfc画图课程设计
mfc 画图课程设计一、课程目标知识目标:1. 学生能理解MFC(Microsoft Foundation Classes)的基本概念,掌握MFC画图程序的基本结构。
2. 学生能运用MFC中的画图工具,如画笔、画刷、线条、矩形等,进行简单的图形绘制。
3. 学生了解并掌握MFC中的颜色设置、图形填充等操作。
技能目标:1. 学生能独立创建一个MFC画图程序,并运用各种工具进行图形绘制。
2. 学生能通过MFC画图程序,将所学知识应用于实际问题,提高编程解决问题的能力。
3. 学生能在团队协作中,共同完成一个复杂的画图作品,提高沟通与协作能力。
情感态度价值观目标:1. 培养学生对计算机编程的兴趣,激发学习积极性,增强自信心。
2. 培养学生良好的编程习惯,注重代码规范,提高代码质量。
3. 培养学生的创新意识和团队精神,鼓励学生互相学习、互相帮助,共同进步。
课程性质:本课程为信息技术课程,旨在让学生掌握MFC画图的基本操作,培养编程兴趣和实际操作能力。
学生特点:学生处于高年级阶段,具备一定的编程基础,对MFC画图有一定了解,但实际操作能力较弱。
教学要求:结合学生特点和课程性质,以实践操作为主,注重培养学生的动手能力和团队协作能力。
将课程目标分解为具体的学习成果,便于后续教学设计和评估。
二、教学内容1. MFC基本概念介绍:MFC画图程序的框架结构、常用类和对象的作用。
2. 画图工具的使用:画笔、画刷、线条、矩形、椭圆等图形绘制方法。
3. 颜色设置与图形填充:颜色设置、画刷填充、渐变填充等操作。
4. MFC画图程序实例:创建一个简单的MFC画图程序,演示各种画图工具的使用。
5. 综合实践:分组进行团队协作,完成一个具有实际意义的画图作品。
6. 代码优化与规范:讲解编程规范,提高代码可读性和维护性。
教学大纲安排:第一课时:MFC基本概念介绍,了解MFC画图程序的框架结构。
第二课时:学习画笔、画刷、线条等基本画图工具的使用。
MFC编程讲稿
一、绘图功能(一)生成Draw程序框架(二)鼠标绘图用鼠标绘制图形,一般分三个环节:(1)确定绘图位置:按下鼠标左键,产生WM_LBUTTONDOWN消息(2)确定图形显示范围:拖动鼠标,产生WM_MOUSEMOVE消息(3)完成图形显示:放开鼠标左键,产生WM_LBUTTONUP消息1.在视图类CDrawView中加入数据成员选择ClassView视图,双击CdrawView,光标直接停留在类CdrawView的定义处。
在类CdrawView的定义中加入如下代码。
class CDrawView : public CView{//代码开始编写protected:int m_Dragging;CPoint m_PointOld;CPoint m_PointOrigin;//代码编写结束protected: // create from serialization onlyCDrawView();DECLARE_DYNCREATE(CDrawView)// Attributespublic:CDrawDoc* GetDocument();// Operationspublic:// Overrides// ClassWizard generated virtual function overrides//{{AFX_VIRTUAL(CDrawView)public:virtual void OnDraw(CDC* pDC); // overridden to draw this viewvirtual BOOL PreCreateWindow(CREATESTRUCT& cs);protected:virtual BOOL OnPreparePrinting(CPrintInfo* pInfo);virtual void OnBeginPrinting(CDC* pDC, CPrintInfo* pInfo);virtual void OnEndPrinting(CDC* pDC, CPrintInfo* pInfo);//}}AFX_VIRTUAL// Implementationpublic:virtual ~CDrawView();#ifdef _DEBUGvirtual void AssertValid() const;virtual void Dump(CDumpContext& dc) const;#endifprotected:// Generated message map functionsprotected://{{AFX_MSG(CDrawView)// NOTE - the ClassWizard will add and remove member functions here.// DO NOT EDIT what you see in these blocks of generated code !//}}AFX_MSGDECLARE_MESSAGE_MAP()};2.在视图类构造函数CdrawView()中初始化数据成员选择ClassView视图,单击CdrawView,找到并双击构造函数CdrawView(),光标直接停留在CDrawView::CDrawView()处。
MFC绘图 实验报告
基于MFC的绘图软件目录基于MFC的绘图软件11 .引言 (2)2.MFC设备上下文及绘图的基本理论知识 (2)2.1 GDI(Graphic Device Interface)绘图的实现 (2)2.2 MFC图形对象类 (2)2.3 库存的GDI对象 (3)2.4与绘图有关的简单数据类型 (4)2.5 MFC应用程序框架中的图形绘制和刷新 (5)3.设计的主体内容MFC设备描述表---CDC类 (5)3.1 CDC类及其派生类 (5)3.2 文本输出 (6)3.3CDC常用的绘图函数 (6)3.4画笔和画刷 (8)4.软件主体设计 (8)4.1 资源编辑 (8)4.2 具体实现 (11)5.结果分析与讨论 (19)6.总结 (19)附录:简单绘图软件作品说明............................................ 错误!未定义书签。
1 .引言计算机的发展也是计算机语言的发展得到了很大的提高,人们的生活中离不开图像,除了我们可以用铅笔在纸上画图外,我们也可以在电脑上绘制我们的想象,本实验就是基于VC++的一个小型的绘图软件,虽然麻雀虽小五脏俱全。
本课题就是要实现这一小小的软件。
2.MFC 设备上下文及绘图的基本理论知识2.1 GDI(Graphic Device Interface)绘图的实现图形设备接口(GDI )可以理解为一个可执行程序,它处理来自windows 应用程序的图形函数调用,然后把这些调用传递给合适的设备驱动程序,由设备驱动程构关系如下:设备描述表(DC )是一种windows 数据结构,它包含了与一个设备(如显示器)的绘制属性的相关信息。
所有的绘制操作通过一个设备上下文对象进行,该对象封装了实现绘制线条,形状和文本的windows API 函数。
设备上下文可以用来向屏幕,打印机和图元件输入结果。
2.2 MFC 图形对象类Windows 提供了多种用于在设备描述表中进行绘图的图形对象,如画笔,位图,调色板,区域,和路径等。
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的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画图课程设计一、教学目标本课程旨在通过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、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验八 MFC 鼠标做图编程实验
一、实验目的
(1) 熟悉Visual C++ 6.0 开发环境;
(2) 掌握应用MFC 类库编写鼠标绘图程序的方法;
(3) 掌握MFC 环境中绘图函数的使用方法。
二、实验内容
创建一个单文档应用程序,实现鼠标的绘图功能。
要求:
(1) 创建一个工具栏,有线段、矩形、椭圆三个按钮;
(2) 绘图前,选择工具栏上的按钮,确定图形的形状。
按下鼠标左键,开始绘图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标的移动在屏幕上实时绘制图形,放开鼠标左键,确定最后的图形,绘制在屏幕上。
三、程序代码
在work8View.h中声明:
class CWork8View : public CView
{protected:
CWork8View();
DECLARE_DYNCREATE(CWork8View)
// Attributes
public:
CWork8Doc* GetDocument();
DWORD m_i;
int m_X0;
int m_X1;
int m_Y0;
int m_Y1;
bool m_down0;
bool m_down1;
bool m_down2;
boolm_show;
// Operations
在work8View.h中的相关代码:
CWork8View::CWork8View()
{// TODO: add construction code here
m_down0=FALSE;
m_down1=FALSE;
m_down2=FALSE;
m_show=TRUE;
}
CWork8View::~CWork8View()
{}
BOOL CWork8View::PreCreateWindow(CREATESTRUCT&cs)
{// TODO: Modify the Window class or styles here by modifying
// the CREATESTRUCT cs
returnCView::PreCreateWindow(cs);
}
/////////////////////////////////////////////////////////////////////////////
// CWork8View drawing
void CWork8View::OnDraw(CDC* pDC)
{
CWork8Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// TODO: add draw code for native data here
pDC->SetTextColor(RGB(0,0,255));
pDC->TextOut(10,10,"点击相应按钮画对应的图形,点击“清除”清空窗口"); }
void CWork8View::OnOperEllipse() //
{// TODO: Add your command handler code here m_i=1;
m_down1=TRUE;
m_down0=FALSE;
m_down2=FALSE;
m_show=TRUE;
Invalidate();
}
void CWork8View::OnOperLine()
{
// TODO: Add your command handler code here m_i=0;
m_down0=TRUE;
m_down1=FALSE;
m_down2=FALSE;
m_show=TRUE;
Invalidate();
}
void CWork8View::OnOperRectangle()
{
// TODO: Add your command handler code here m_i=2;
m_down2=TRUE;
m_down0=FALSE;
m_down1=FALSE;
m_show=TRUE;
Invalidate();
}
void CWork8View::OnLButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default m_X0=m_X1=point.x;
m_Y0=m_Y1=point.y;
CView::OnLButtonDown(nFlags, point);
}
void CWork8View::OnMouseMove(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default CView::OnMouseMove(nFlags, point);
CClientDCdc(this);
dc.SelectStockObject(WHITE_PEN);
dc.SelectStockObject(WHITE_BRUSH);
if((nFlags& MK_LBUTTON)&&m_show)
{ if(m_i==1)
dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1);
else if(m_i==0)
{dc.MoveTo(m_X0,m_Y0);
dc.LineTo(m_X1,m_Y1);}
else if(m_i==2)
dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1);}
m_X1 = point.x;
m_Y1 = point.y;
dc.SelectStockObject(BLACK_PEN);
dc.SelectStockObject(GRAY_BRUSH);
if((nFlags& MK_LBUTTON )&&m_show)
{
if(m_i==1)
dc.Ellipse(m_X0,m_Y0,m_X1,m_Y1);
else if(m_i==0)
{dc.MoveTo(m_X0,m_Y0);
dc.LineTo(m_X1,m_Y1);}
else if(m_i==2)
dc.Rectangle(m_X0,m_Y0,m_X1,m_Y1);
}
}
void CWork8View::OnUpdateOperEllipse(CCmdUI* pCmdUI) {
// TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down1);
}
void CWork8View::OnUpdateOperLine(CCmdUI* pCmdUI) {
// TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down0);
}
void CWork8View::OnUpdateOperRectangle(CCmdUI* pCmdUI) {
// TODO: Add your command update UI handler code here pCmdUI->SetCheck(m_down2);
}
void CWork8View::OnOperShow()
{
// TODO: Add your command handler code here
m_show=!m_show;
m_down0=FALSE;
m_down1=FALSE;
m_down2=FALSE;
Invalidate();
}
四、运行结果
五、实验总结。