1. 程式人生 > >在MFC和ATL工程中加入GIF動畫(CPictureEx,CPitureExWnd)

在MFC和ATL工程中加入GIF動畫(CPictureEx,CPitureExWnd)

 一、怎樣使用MFC版的CPictureEx:

1、你的對話方塊中加入一個靜態文字控制元件(Static Text)或圖片控制元件(Picture Control),Group Box也可以;   

2、給控制元件的ID改個名字如IDC_MYPICTURE;   

3、利用ClassWizard給控制元件新增變數。如:Category-Control,Variable type-CStatic;   

4、在對話方塊的標頭檔案中用CPictureEx替換CStatic(當然不要忘記在你的工程中加入PictureEx.h和PictureEx.cpp,並#include "PictureEx.h");   

5、在OnInitDialog(或者其他什麼你喜歡的地方)加入下面的程式碼:   

if (m_Picture.Load(_T("mypicture.gif")))   

    m_Picture.Draw();   

6、欣賞一下你的動畫:)  

你可以像處理標準的CStatic一樣處理CPictureEx,可以手動建立它(實際上,當你的工程視窗不是對話方塊時,你必須得這樣),呼叫CPictureEx::Create(), 接著呼叫CPicureEx::Load()和CPicture::Draw()。 

二、 ATL工程中加入GIF動畫

ATL版的CPitureExWnd使用也是以上步驟,但是第三點中不同的是,沒有ClassWizard的幫助,你須手工加入一個CPictureExWnd型別的變數,並加入以下程式碼在你的WM_INITDIALOG訊息處理程式中:   

HWND hWnd = GetDlgItem(IDC_MYPIC);   

if (hWnd) {   

 m_wndBanner.SubclassWindow(hWnd);//m_wndBanner即手工新增的變數   

}   

之後,你可以呼叫CPictureExWnd::Load()和CPicureExWnd::Draw()。當然,你也可以直接呼叫CPictureExWnd::Create,CPictureExWnd只是一個普通的視窗,這個普通的視窗的視窗程式中含有一些擴充套件的函式而已。  

可用的介面函式有:

  1. BOOL Load(...) - 裝載一個GIF併為顯示準備一個物件;   
  2. BOOL Draw() - 顯示GIF或GIF動畫;   
  3. void Stop() - 停止動畫;   
  4. void UnLoad() - 停止動畫並釋放所有資源;    
  5. void SetBkColor(COLORREF) - 設定背景顏色(透明區域);   
  6. COLORREF GetBkColor() - 取得背景顏色;   
  7. BOOL IsGIF() - 判斷是否GIF;   
  8. BOOL IsAnimatedGIF() - 判斷是否GIF動畫;   
  9. BOOL IsPlaying() - 判斷動畫是否在播放中;   
  10. SIZE GetSize() - 獲取當前圖的尺寸;   
  11. int GetFrameCount() - 獲取當前動畫的幀數;   
  12. BOOL GetPaintRect(RECT *lpRect) - 獲取當前繪圖區域;    
  13. BOOL SetPaintRect(const RECT *lpRect) - 設定繪圖區域;   
  14. CPictureEx[Wnd]::Load有三個版本的過載函式:   
  15. BOOL Load(LPCTSTR szFileName);//此版本過載函式的引數是圖的路徑,返回值是成功已否的布林值。     
  16. BOOL Load(HGLOBAL hGlobal, DWORD dwSize);//此版本的引數是GlobalAlloc使用GMEM_MOVABLE標記分配的全域性記憶體塊的控制代碼及其大小。該函式不會釋放記憶體,所以記得用GlobalFree釋放記憶體。     
  17. BOOL Load(LPCTSTR szResourceName,LPCTSTR szResourceType);//此版本從資源中獲取圖片名和圖片型別。例如:     
  18. m_Picture.Load(MAKEINTRESOURCE(IDR_MYPIC),_T("GIFTYPE"));  

注:裝載一個圖片後,呼叫CPictureEx[Wnd]::Draw()顯示它。如果是一個GIF動畫,Draw函式會建立一個背景執行緒去播放動畫;如果是一個靜止的圖片,它會被OleLoadPicture/IPicture直接顯示。你可以呼叫CPictureEx[Wnd]::Stop()在任意時刻停止播放執行緒。如果你不但想終止播放執行緒,還想釋放資源,使用CPictureEx[Wnd]::UnLoad()。注意:CPictureEx[Wnd]::Load自動呼叫Unload()函式。

預設地,背景被COLOR_3DFACE填充(即對話方塊的背景顏色)。如果你需要改變背景顏色,可在呼叫CPictureEx[Wnd]::Load()後呼叫CPictureEx[Wnd]::SetBkColor(COLORREF)。