MFC简单自学图形绘制1

本节主要简单学习下绘制基本图形,并设置一个定时器,图形会随时间变化而变化。windows



效果就是上面这三个图形轮流变化。
函数


首先新建一个MFC项目,选择单文档模式、学习

图像显示主要是在view类中操做的,因此下面全部的操做都是在view类中进行、指针

首先在view类中新建一个变量int m_PicChange;//  标识要绘制的图像编号。code

并在构造函数中初始化。blog

由于要随时间变化,因此须要设置一个定时器。事件

在view类上右键添加windows消息事件处理函数或者在类向导中添加也能够。ip

添加WM_CREATE和WM_TIMER的消息处理函数。文档

WM_CREATE消息中咱们要作的是 在程序运行时,就添加一个定时器。class

WM_TIMER消息中咱们要处理的时候定时器时间结束时改变要显示的图像编号的值。


int CP1_1View::OnCreate(LPCREATESTRUCT lpCreateStruct) 
{
	if (CView::OnCreate(lpCreateStruct) == -1)
		return -1;
	
	// 添加定时器
	SetTimer(1, 1000, 0);
	
	return 0;
}


添加定时器的函数比较好理解,这里就不介绍了。


当定时结束时,会发送一个WM_TIMER消息供咱们处理,


void CP1_1View::OnTimer(UINT nIDEvent) 
{
	//获取指针pdc
	CDC *pDC=GetDC();
	//调用OnDraw(pDC)重画
	OnDraw(pDC);
	//使m_PicChange循环
	m_PicChange=(m_PicChange+1)%3;

	CView::OnTimer(nIDEvent);
}

这个函数主要仍是改变m_PicChange的值,并通知系统重绘界面。

因此主要仍是OnDraw中处理的内容,是主要显示图像的函数。

void CP1_1View::OnDraw(CDC* pDC)
{
	CP1_1Doc* pDoc = GetDocument();
	ASSERT_VALID(pDoc);

	// 使用白色底边填充背景 作到删除上一个图形的效果
	CBrush myBrush;
	myBrush.CreateSolidBrush(RGB(255,255,255));
	pDC->FillRect(CRect(0,0,1024,768), &myBrush);

	if ( m_PicChange == 0 )
		// 画方
		pDC->Rectangle(10,10,50,50);
	else if ( m_PicChange == 1 )
		// 画圆
		pDC->Ellipse(10,10,50,50);
	else 
	{
		// 画三角
		pDC->MoveTo(30,10);
		pDC->LineTo(10,50);
		pDC->LineTo(50,50);
		pDC->LineTo(30,10);
	}

}

代码也比较简单。上面是清除上一个图像,下面是根据当前要显示的图像编号,进行绘图。

mfc能够绘制的图形不少,也能够使用画笔,笔刷进行上色填充等,后面会慢慢介绍。