一、首先使用 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;
}
動態顯示的演算法很簡單,就是不斷移動填充圖象的位置。