Chinaunix首页 | 论坛 | 博客
  • 博客访问: 537273
  • 博文数量: 576
  • 博客积分: 40000
  • 博客等级: 大将
  • 技术积分: 5020
  • 用 户 组: 普通用户
  • 注册时间: 2008-10-13 14:47
文章分类

全部博文(576)

文章存档

2011年(1)

2008年(575)

我的朋友

分类:

2008-10-14 14:51:58

模拟 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;
}
动态显示的算法很简单,就是不断移动填充图象的位置。

三、在 CDynLine 中加入控制图象移动的方法 Start() 和 Stop(),很轻松,改变全局变量g_lDisplay的值就OK了。
但是需要注意的是同步问题,使用InterlockedIncrement和InterlockedDecrement函数可以保证正确读写。
最后,在对话框程序中把静态图象控件的类 CStati c改 成CDynLine 就大功告成了!


图二 程序显示界面

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


--------------------next---------------------

当点击停止两次..要点击开始两次才能运动.....
那个进程是如何结束的... ( lxa520 发表于 2008-6-6 11:04:00)
 
是的,注释掉那个头文件,和之后的错误行,就可以编译过去,效果相当不错,非常感谢作者,收藏之。 ( leaf_zhou 发表于 2004-11-4 22:08:00)
 
很么鬼东西呀!编译都通不过以后不要上传这些编译都通不过的东西上来。 ( tangkl 发表于 2004-7-9 11:14:00)
 
什么啊
编译不过去
破东西 ( qiyanchao 发表于 2004-3-23 18:40:00)
 
我是原文作者,
回答第二位网友回复的问题:
这个头文件和本工程无关,注释掉就行了 ( indian3 发表于 2004-3-11 9:52:00)
 
少了一个文件吧。
#include "..\..\ETC\SOURCE\COMMON\include\RoadDef.h" ( feifei2001 发表于 2004-3-10 9:31:00)
 
有点意思. ( appleii 发表于 2004-3-10 9:21:00)
 
.......................................................

--------------------next---------------------

阅读(305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~