分类: C/C++
2008-04-23 21:46:01
模拟 Windows 开机动态色带条
作者:
一、首先使用 ResHacker 将 NTOSKRNL.EXE 中的资源 HACK 出来,安装过 ResHacker 后,
找到系统目录下的 NTOSKRNL.EXE,
然后打开文件,在位图资源处找到我们需要的 Windows 开机画面,
然后用保存资源成BMP的方式将资源导出到一个BMP文件,通过简单的处理就可以得到静态的色带的BMP文件 dynaline.bmp 了!:->:
图一 使用 ResHacker 得到开机画面
二、程序设计
接下来我们需要在 VC 中创建一个简单的对话框工程 DemoLine
导入我们获得的静态位图 dynaline.bmp,在工程中加入一个bitmap 资源 IDB_DYNLINE
在的对话框中加入静态的 Picture 控件,将 CStatic 属性设成 bitmap,
然后创建一个派生于 CStatic 的 MFC 新类 CDynLine,我们让这个类来完成动画显示!
在类 CDynLine 的实现代码中加入工作线程,它负责将静态的画面显示成动态的色带条,代码如下:
UINT DispThread(LPVOID lpParam) { CDynLine* pWnd = (CDynLine*)lpParam; CClientDC dcClient(pWnd); CDC dcMem; dcMem.CreateCompatibleDC(&dcClient); BITMAP bits; pWnd->m_bmp.GetBitmap(&bits); CBitmap *pBmp = (CBitmap*)dcMem.SelectObject( pWnd->m_bmp ); CSize size(0,0); while(g_lDisplay) { if( size.cx < bits.bmWidth ) size.cx =2; else size.cx = 0; dcClient.BitBlt( 0,0,size.cx,bits.bmHeight,&dcMem,(bits.bmWidth-size.cx),0,SRCCOPY); dcClient.BitBlt( size.cx,0,(bits.bmWidth-size.cx),bits.bmHeight,&dcMem,0,0,SRCCOPY); Sleep( 20 ); } return 1; }动态显示的算法很简单,就是不断移动填充图象的位置。