本节主要简单学习下绘制基本图形,并设置一个定时器,图形会随时间变化而变化。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); }
因此主要仍是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能够绘制的图形不少,也能够使用画笔,笔刷进行上色填充等,后面会慢慢介绍。