Visual C++ MFC的图形绘制

Visual C++ MFC的图形绘制

1. 带菜单界面制作

新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示
Visual C++ MFC的图形绘制_第1张图片
1.启动Visual C++6.0后,打开【File】(文件)菜单下的【New】(新建)菜单项,选择Project(工程)项。然后选择“MFC AppWizard(exe)”选项,在右边的对话框Project name(工程名称)中输入“Graphic”,在接下来的步骤中依次选择“多重文档”,然后单击【Finish】(完成)按钮。
Visual C++ MFC的图形绘制_第2张图片
Visual C++ MFC的图形绘制_第3张图片
进来之后
Visual C++ MFC的图形绘制_第4张图片
第3步就改一下属性名称就可以了,然后下面就会出现一个方框,同样的点进去,ID,标明直接复制老师给的文档里面的就可以了(有一个会报错,IDM-RECTANGLE,这个不是-而是下滑线_,IDM_RECTANGLE)Visual C++ MFC的图形绘制_第5张图片
全部加完之后就是这样的
Visual C++ MFC的图形绘制_第6张图片
然后在对话框空白处单击右键,选择“ClassWizard”(建立类向导)选项,显示如下所示的“MFC Class Wizard”对话框,选择“Member Maps”选项卡,在“Object Ids”中可以看到对话框界面上的按钮和文本框的ID。选择“IDM_DOT”,单击【Add Variable】,为“IDC_Dot”添加变量(下面几个IDM_XXX,都按上述步骤添加变量)如图:
Visual C++ MFC的图形绘制_第7张图片
Visual C++ MFC的图形绘制_第8张图片
全都填加完后点确定。
然后在FileView–>Header Files
–>GraphicView.h(双击),添加一个私有变量,如图:
Visual C++ MFC的图形绘制_第9张图片
然后在FileView–>Header Files
–>GraphicView.cpp(双击),找到CGraphicView::CGraphicView()函数,进行初始化
Visual C++ MFC的图形绘制_第10张图片
加完之后往下滑 或者 在Class View
–>CGraphicView–>OnDot()(双击)
Visual C++ MFC的图形绘制_第11张图片
从OnDot()开始往下选中,换成如下代码

void CGraphicView::OnDot() 
{
	m_nDrawType=1;
}
void CGraphicView::OnLine() 
{
	m_nDrawType=2;
}
void CGraphicView::OnRectangle() 
{
	m_nDrawType=3;
}
void CGraphicView::OnEllipse() 
{
	m_nDrawType=4;
}
void CGraphicView::OnShanxing() 
{
	m_nDrawType=5;
}
void CGraphicView::OnLianxuxian() 
{
	m_nDrawType=6;
}

第一步就算完成了。

2. 点、直线、矩形、椭圆的绘制

对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别捕获鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。在鼠标按下消息响应函数中,保存该点。

在对话框空白处单击右键,选择“ClassWizard”(建立类向导)选项,显示如下所示的“MFC Class Wizard”对话框,选择“Member Maps”选项卡,在“Object Ids”中选
CGraphicView,在Messages里面找到WM_LBUTTONDOWN—>Add Function
再WM_LBUTTONUP–>Add Function(这两个就是鼠标按下跟弹起)
如图:Visual C++ MFC的图形绘制_第12张图片
然后在FileView–>Header Files
–>GraphicView.h(双击),再添加一个私有变量,如图:
Visual C++ MFC的图形绘制_第13张图片
然后在FileView–>Header Files
–>GraphicView.cpp(双击),找到CGraphicView::CGraphicView()函数,进行初始化Visual C++ MFC的图形绘制_第14张图片
初始化后,直接往下滑到最底,把这两个函数
Visual C++ MFC的图形绘制_第15张图片
改为Visual C++ MFC的图形绘制_第16张图片

void CGraphicView::OnLButtonDown(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
	m_ptOrigin=point;  //保存鼠标按下得到点,也是绘制一个点
	CView::OnLButtonDown(nFlags, point);
}
在鼠标左键弹起消息响应函数中实现绘图,代码如下:
void CGraphicView::OnLButtonUp(UINT nFlags, CPoint point) 
{
	// TODO: Add your message handler code here and/or call default
//创建并获得设备描述
	CClientDC dc(this); 
	switch (m_nDrawType)
	{
	case 1:
		dc.SetPixel(point,RGB(255,0,0)); /*绘制点*/
		break;
	case 2:                     /*绘制直线*/
		dc.MoveTo(m_ptOrigin);/*调用MoveTo函数移动到原点*/
		dc.LineTo(point);/*调用LineTo函数绘制到终点。*/
		break;
	case 3:       /*绘制矩形*/            
		dc.Rectangle(CRect(m_ptOrigin,point));
		break;
	case 4:        /*绘制椭圆*/
		dc.Ellipse(CRect(m_ptOrigin,point));
		break;
	CView::OnLButtonUp(nFlags, point);
}
}

如果你复制Word文档里面的代码,会有报错
Visual C++ MFC的图形绘制_第17张图片
位置1:括号要改成英文的
位置2:少了一个反括号
改完后,大家就可以编译运行(Ctrl+F5)了,(因为只有四个函数,所以扇形跟连续线没有实现是画不出来的)
如图:
Visual C++ MFC的图形绘制_第18张图片刚刚有人问我#include"stdafx.h",报错怎么解决。
具体方法还没研究出来,不过有的同学吧这个改成#include"StdAfx.h"就解决了
还有一个方法就是,打开StdAfx.cpp,编译一下(报错不管),关掉这个cpp,再编译一开始那个就解决了

你可能感兴趣的:(MFC)