模拟 Windows 开机动态色带条

王朝vc·作者佚名  2006-01-17
窄屏简体版  字體: |||超大  

模拟 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 的实现代码中加入工作线程,它负责将静态的画面显示成动态的色带条,代码如下:

UINTDispThread(LPVOID lpParam)

{

CDynLine* pWnd = (CDynLine*)lpParam;

CClientDC dcClient(pWnd);

CDCdcMem;

dcMem.CreateCompatibleDC(&dcClient);

BITMAPbits;

pWnd-m_bmp.GetBitmap(&bits);

CBitmap *pBmp = (CBitmap*)dcMem.SelectObject( pWnd-m_bmp );

CSizesize(0,0);

while(g_lDisplay)

{

if( size.cx

动态显示的算法很简单,就是不断移动填充图象的位置。

三、在 CDynLine 中加入控制图象移动的方法 Start() 和 Stop(),很轻松,改变全局变量g_lDisplay的值就OK了。

但是需要注意的是同步问题,使用InterlockedIncrement和InterlockedDecrement函数可以保证正确读写。

最后,在对话框程序中把静态图象控件的类 CStati c改 成CDynLine 就大功告成了!

图二 程序显示界面

四、使用这样的一个类用于其他的工程,通过动态的色带告诉用户程序正在处理状态,很直观,且简单明了。

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航