龙盟编程博客 | 无障碍搜索 | 云盘搜索神器
快速搜索
主页 > 软件开发 > VC开发 >

VC中用GDI函数实规高速平滑动画(5)

时间:2009-12-30 15:42来源:未知 作者:admin 点击:
分享到:
//控制文本显示的位置位于客户区以内 x = rand()%rect.Width()/2; y = rand()%rect.Height(); //在内存中显示文本 m_MemBitmap.Clear(rect.left,rect.top,rect.right,rect.bottom,RGB(0,0,0
  //控制文本显示的位置位于客户区以内

    x = rand()%rect.Width()/2;

    y = rand()%rect.Height(); 

    //在内存中显示文本  

    m_MemBitmap.Clear(rect.left,rect.top,rect.right,rect.bottom,RGB(0,0,0));

    m_MemBitmap.TextOut(10,10,500,"固定的文本",RGB(255,255,255));

    m_MemBitmap.TextOut(x,y,400,"GDI函数实现高速动画演示",RGB(255,255,0));

    //内存设备环境将位图对象选入

    dcComp.CreateCompatibleDC(pDC);

    dcComp.SelectObject(&m_MemBitmap);

    //用位传输函数显示出来

    pDC->BitBlt(0,0,rect.Width(),rect.Height(), &dcComp, 0,0,SRCCOPY);

    dcComp.DeleteDC();

    ReleaseDC(pDC);

    CView::OnTimer(nIDEvent);

}

       读者可根据注释理解代码的含义,需要说明的是:在内存中绘制位图时,本例采用了一个静态显示文本和一个随机动态显示的文本来比较,从运行情况可以看出动态显示的文本0.1秒就随机移动一次位置,虽然每次绘制位图都使用Clear函数清屏,但静态文本的显示没有一点闪动,动画非常平滑,速度也很快。

怎么样,很简单吧?如果您再创建一个线程后台绘制图形,将会实现很多特殊效果的动画来,我们可以将这项技术用在用户界面上或其他地方,将会收到意想不到的动画效果。

三、结束语

通过以例子,用GDI函数实现高速平滑的动画也很简单。我们可以添加绘制位图,画线、画矩形等成员函数,便能实现各种GDI绘图函数的操作,如果读者还有兴趣,可以在显示位图,作优化显示,如:不是将位图全部显示出来,而是显示其中动画的一部分,因为BitBlt函数作位传输很慢。我开发的纸牌游戏“扑克麻将”就经过优化,其动画速很快,如果读者有兴趣,请到程序员大本营(http://www.csdn.net )共享软件栏目下载。欢迎来信与我切磋VC++编程技巧,My Email:Highersoft@yeah.net。

精彩图集

赞助商链接