本节实现了图像使用画笔纯色填充,已经位置的移动。
逻辑也比较简单,思路还是使用变量,由此变量计算出一个颜色值,一个位置值。
然后在该位置绘制一个该颜色的圆。
还是和上节一眼新建一个mfc项目,处理WM_CREATE消息和WM_TIMER消息。
代码也比较简单
在WM_CREATE中使用SetTimer函数创建一个定时器,
int CP1_2View::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CView::OnCreate(lpCreateStruct) == -1)
return -1;
SetTimer( 1, 1000, NULL );
return 0;
}
在WM_TIMER中处理小变量增值,
void CP1_2View::OnTimer(UINT nIDEvent)
{
CDC *pDC = GetDC();
OnDraw(pDC);
m_CloChange ++;
m_PosChange ++;
CView::OnTimer(nIDEvent);
}
最后就是在OnDraw函数中绘制图形了。
void CP1_2View::OnDraw(CDC* pDC)
{
CP1_2Doc* pDoc = GetDocument();
ASSERT_VALID(pDoc);
// 使用白色底边填充背景 做到删除上一个图形的效果
CBrush myBrush;
myBrush.CreateSolidBrush(RGB(255,255,255));
pDC->FillRect(CRect(0,0,1024,768), &myBrush);
int i = m_CloChange;
int x = (m_PosChange%7)*50+10;
int y = x + 50;
// 设置画刷颜色
CBrush br(RGB(20+(64*i)%255,140+(64*i)%255,210*(64+i)%255));
// 选择画刷
pDC->SelectObject(br);
// 绘图
pDC->Ellipse(x,10,y,60);
}
内容和逻辑都比较简单。