MFC简单自学图形绘制1

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



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


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

图像显示主要是在view类中操作的,所以下面所有的操作都是在view类中进行、

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

并在构造函数中初始化。

因为要随时间变化,所以需要设置一个定时器。

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

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

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

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可以绘制的图形很多,也可以使用画笔,笔刷进行上色填充等,后面会慢慢介绍。



  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值