闪屏图形特技效果的实现.doc_第1页
闪屏图形特技效果的实现.doc_第2页
闪屏图形特技效果的实现.doc_第3页
全文预览已结束

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

闪屏图形特技效果的实现作者/李建湘 在程序实际开发中,闪屏是我们经常用到的。如果程序初始化要一些时间,设计闪屏更加有必要,不但使你的程序也漂亮,还能在上面写上你的版本信息。好处是多多的。在VC+6.0组件库中有一个splash screen闪屏组件,可以添加到程序中。但是初学者打开源代码学习时,里面函数太多,一时之间也搞不明白。而且显示的闪屏很呆板。为了使初学者明白,我搞了一个很简单的类,里面只有二个函数,结构很清晰。一看就明白,还有详细的注释。功能并不比VC+6.0自带那个逊色。 闪屏其实就是窗口,其基类是CWnd,与一般的窗口没有什么区别,只不过这个窗口在开始显示而已。利用类向导生成一个新类,其基类为CWnd。在新类中增加如下变量。 CDC MemDC; /创建内存DCBITMAP bm; /创建位图结构变量CBitmap m_bitmap; /创建位图对象CBitmap *old_bitmap; /创建位图对象指针 在资源中导入一张位图,色彩可以大于256色,只不过在VC中不能编辑256以上的位图。在构造函数初始化。 m_bitmap.LoadBitmap(IDB_BITMAP1);/拷贝资源位图m_bitmap.GetBitmap(&bm);/得到位图结构中的大小信息 并在类的头文件中#include resource.h,否则编译时会出现IDB_BITMAP1没有定义的错误。然后在类中增加一个函数CreatLjxWnd()用来生成窗口。在里面增加如下代码: CreateEx(0, AfxRegisterWndClass(0,AfxGetApp()-LoadStandardCursor(IDC_ARROW),/注册类 animatesplash,/窗口标题 WS_POPUP,/窗口为弹出式 0,0,bm.bmWidth,bm.bmHeight, /建立大小与位图大小相同的窗口 NULL, NULL, NULL ); 这一下我们可以把位图显示在窗口里了。特技显示有很多,像淡入,半透明等等。如想得到更多的特效算法,可以参考化境编程界网站()有一篇Visual C+中的图形特技和精通VC+图像编程,它们里面的算法写得很详细。我们这里采用随机积木法。原理是:将内存设备情境对象(如MemDC)中的位图数据分成纵横十等份共一百组数据,然后随机地取出这一百组数据中的某一组显示到目标设备(如ClientDC)中待显示位图的相应位置,如此反复直到所有一百组数据均显示完毕为止。我们增加WM_PAINT消息,vc+自动生成响应此消息的对应函数,特技显示代码也在此函数执行。在函数中增加代码: MemDC.CreateCompatibleDC(NULL);/建立一个和dc兼容的内存DC放置位图old_bitmap=MemDC.SelectObject(&m_bitmap);/将创建的位图选入内存DC/随机积木图像显示特技算法int i,j,stepx,stepy,dispnum,x,y; int ljx2020; /数组记录已显示过的数据组 for ( i=0; i20; i+ ) for ( j=0; j=400 ) break; Sleep(10); MemDC.SelectObject(old_bitmap); 到此,我们这个类已经大功告成了。现在就是要在对话框应用程序显示之前显示它出来。接下来我们要把这个类实例化再显示。我们找到应用程序的初始化函数InitInstance(),在里面增加如下代码: BOOL CAnimatesplashApp:InitInstance() AfxEnableControlContainer();#ifdef _AFXDLL Enable3dControls(); / Call this when using MFC in a shared DLL#else Enable3dControlsStatic(); / Call this when linking to MFC statically#endif /增加的代码 CLjxWnd *ljxljx=new CLjxWnd; /建立一个新窗口对象 ljxljx-CreatLjxWnd (); /创建窗口 ljxljx-CenterWindow (); /在屏幕中央 ljxljx-ShowWindow (SW_SHOW); /显示窗口 ljxljx-UpdateWindow (); /更新窗口,激活OnPait函数 Sleep(2000); /等待函数指定秒钟 if (ljxljx!=NULL) ljxljx-SendMessage (WM_CLOSE); /关闭窗口 /代码结束 CAnimatesplashDlg dlg; m_pMainWnd = &dlg; int nResponse = dlg.DoModal(); if (nResponse = IDOK) / TODO: Place code here to handle when the dialog is / dismissed with OK else if (nResponse = IDCANCEL) / TODO: Place code here to handle when the dialog is / dismissed with Cancel / Since the dialog has been closed, return FALSE so that we exit the

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论