CAnimateCtrl 類別

提供 Windows 通用動畫控制項的功能。

語法

class CAnimateCtrl : public CWnd

成員

公用建構函式

名稱 描述
CAnimateCtrl::CAnimateCtrl 建構 CAnimateCtrl 物件。

公用方法

名稱 描述
CAnimateCtrl::Close 關閉 AVI 剪輯。
CAnimateCtrl::Create 建立動畫控件,並將它附加至 CAnimateCtrl 物件。
CAnimateCtrl::CreateEx 使用指定的 Windows 擴充樣式建立動畫控件,並將它附加至 CAnimateCtrl 物件。
CAnimateCtrl::IsPlaying 指出音訊-視訊交錯 (AVI) 剪輯是否正在播放。
CAnimateCtrl::Open 從檔案或資源開啟 AVI 剪輯,並顯示第一個畫面。
CAnimateCtrl::P lay 播放沒有聲音的 AVI 剪輯。
CAnimateCtrl::Seek 顯示 AVI 剪輯的選取單一框架。
CAnimateCtrl::Stop 停止播放 AVI 剪輯。

備註

此控件(因此類別 CAnimateCtrl )僅適用於在 Windows 95、Windows 98 和 Windows NT 3.51 版和更新版本下執行的程式。

動畫控件是矩形視窗,以 AVI(音訊視訊交錯)格式顯示剪輯,這是標準的 Windows 視訊/音訊格式。 AVI 短片是一系列的點陣圖框架,例如電影。

動畫控制項只能播放簡單的 AVI 剪輯。 具體來說,動畫控件要播放的剪輯必須符合下列需求:

  • 必須只有一個視訊串流,而且至少必須有一個畫面。

  • 檔案中最多可以有兩個數據流(通常是其他數據流,如果有的話,是音訊數據流,雖然動畫控件會忽略音訊資訊)。

  • 剪輯必須以 RLE8 壓縮來解壓縮或壓縮。

  • 影片串流中不允許變更調色盤。

您可以將 AVI 剪輯新增至您的應用程式作為 AVI 資源,也可以隨附您的應用程式作為個別的 AVI 檔案。

因為您的線程會在顯示 AVI 剪輯時繼續執行,因此動畫控件的一個常見用法是在長時間作業期間指出系統活動。 例如,當系統搜尋檔案時,檔案總管 的 [尋找] 對話框會顯示移動放大鏡。

如果您在對話框內或使用對話框編輯器從對話框資源建立 CAnimateCtrl 物件,當使用者關閉對話框時,它就會自動終結。

如果您在視窗中建立 CAnimateCtrl 物件,您可能需要終結它。 如果您在堆疊上建立 CAnimateCtrl 物件,它會自動終結。 如果您使用 函式在堆積new上建立 CAnimateCtrl 物件,則必須在 物件上呼叫 delete 來終結它。 如果您從 CAnimateCtrl 衍生新的類別,並配置該類別中的任何記憶體,請覆寫 CAnimateCtrl 解構函式以處置配置。

如需使用 CAnimateCtrl的詳細資訊,請參閱 控件 和使用 CAnimateCtrl

繼承階層架構

CObject

CCmdTarget

CWnd

CAnimateCtrl

需求

標頭: afxcmn.h

CAnimateCtrl::CAnimateCtrl

建構 CAnimateCtrl 物件。

CAnimateCtrl();

備註

您必須先呼叫 Create 成員函式,才能對您所建立的物件執行任何其他作業。

範例

// This example creates a secondary thread that implements
// the methods of CAnimateCtrl. The procedure of the thread
// is MyClipThreadProc and the thread was created with the
// code AfxBeginThread( MyClipThreadProc, (LPVOID) pParentWnd).
// The example code creates and initializes an animation control,
// then proceeds to pump messages from the queue until one the
// private messages WM_STOPCLIP, WM_PLAYCLIP, WM_SHOWFIRSTFRAME or
// WM_SHOWLASTFRAME is received. The appropriate action is done for
// these messages. The thread ends when the WM_STOPCLIP is received.
// NOTE: the thread parameter, pParam, is a pointer to a CWnd object
// that will be the parent of the animation control.

#define WM_STOPCLIP WM_USER + 1
#define WM_PLAYCLIP WM_USER + 2
#define WM_SHOWFIRSTFRAME WM_USER + 3
#define WM_SHOWLASTFRAME WM_USER + 4

UINT MyClipThreadProc(LPVOID pParam)
{
   // NOTE: pParentWnd is the parent window of the animation control.
   CWnd *pParentWnd = (CWnd *)pParam;
   CAnimateCtrl cAnimCtrl;

   // Create the animation control.
   if (!cAnimCtrl.Create(WS_CHILD | WS_VISIBLE | ACS_CENTER,
                         CRect(10, 10, 100, 100), pParentWnd, 1))
   {
      return false;
   }

   // Open the AVI file.
   if (!cAnimCtrl.Open(_T("MyAvi.avi")))
   {
      return false;
   }

   // Pump message from the queue until the stop play message is received.
   MSG msg;
   while (GetMessage(&msg, NULL, 0, 0) && (msg.message != WM_STOPCLIP))
   {
      switch (msg.message)
      {
         // Start playing from the first frame to the last,
         // continuously repeating.
      case WM_PLAYCLIP:
         if (!cAnimCtrl.Play(0, (UINT)-1, (UINT)-1))
            return false;
         break;

         // Show the first frame.
      case WM_SHOWFIRSTFRAME:
         if (!cAnimCtrl.Seek(0))
            return false;
         cAnimCtrl.RedrawWindow();
         break;

         // Show the last frame.
      case WM_SHOWLASTFRAME:
         if (!cAnimCtrl.Seek((UINT)-1))
            return false;
         cAnimCtrl.RedrawWindow();
         break;
      }

      TranslateMessage(&msg);
      DispatchMessage(&msg);
   }

   cAnimCtrl.Stop();
   cAnimCtrl.Close();

   return true;
}

CAnimateCtrl::Close

關閉先前在動畫控件中開啟的 AVI 剪輯(如果有的話),並將它從記憶體中移除。

BOOL Close();

傳回值

如果成功則不為零,否則為 0。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

CAnimateCtrl::Create

建立動畫控件,並將它附加至 CAnimateCtrl 物件。

virtual BOOL Create(
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

參數

dwStyle
指定動畫控件的樣式。 套用下列一節中所述的任何視窗樣式組合,以及 Windows SDK 中動畫控件樣式中所述 的動畫控件樣式

rect
指定動畫控制項的位置和大小。 它可以是 CRect 物件或 RECT 結構。

pParentWnd
指定動畫控制元件的父視窗,通常是 CDialog。 它不得為 NULL。

nID
指定動畫控件的識別碼。

傳回值

如果成功則不為零,否則為 0。

備註

您會在兩個步驟中建構 CAnimateCtrl 。 首先,呼叫建構函式,然後呼叫 Create,這會建立動畫控件並將它附加至 CAnimateCtrl 物件。

將下列 視窗樣式 套用至動畫控制件。

  • WS_CHILD Always

  • 通常WS_VISIBLE

  • 很少WS_DISABLED

如果您要搭配動畫控制檔使用延伸視窗樣式,請呼叫 CreateEx 而非 Create

除了上述視窗樣式之外,您可能還想要將一或多個動畫控件樣式套用至動畫控件。 如需動畫控件樣式的詳細資訊,請參閱 Windows SDK。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

CAnimateCtrl::CreateEx

建立控件(子視窗),並將它與 CAnimateCtrl 對象產生關聯。

virtual BOOL CreateEx(
    DWORD dwExStyle,
    DWORD dwStyle,
    const RECT& rect,
    CWnd* pParentWnd,
    UINT nID);

參數

dwExStyle
指定要建立之控件的擴充樣式。 如需擴充 Windows 樣式的清單,請參閱 Windows SDK 中 CreateWindowEx 的 dwExStyle 參數

dwStyle
指定動畫控件的樣式。 套用 Windows SDK 中動畫控件樣式中所述之視窗和動畫控件樣式的任何組合。

rect
RECT 結構的參考,描述要建立之視窗的大小和位置,在 pParentWnd 的用戶端座標中

pParentWnd
控件父系之視窗的指標。

nID
控制件的子視窗識別碼。

傳回值

如果成功則為非零;否則為 0。

備註

使用 CreateEx 而不是 Create 來套用延伸的 Windows 樣式,由 Windows 擴充樣式前文WS_EX_所指定。

CAnimateCtrl::IsPlaying

指出音訊-視訊交錯 (AVI) 剪輯是否正在播放。

BOOL IsPlaying() const;

傳回值

如果 AVI 剪輯正在播放,則為 TRUE;否則為 FALSE。

備註

這個方法會 傳送 windows SDK 中所述的ACM_ISPLAYING 訊息。

CAnimateCtrl::Open

呼叫此函式以開啟 AVI 剪輯並顯示其第一個畫面。

BOOL Open(LPCTSTR lpszFileName);
BOOL Open(UINT nID);

參數

lpszFileName
CString物件或 Null 終止字串的指標,其中包含 AVI 檔案的名稱或 AVI 資源的名稱。 如果此參數為 NULL,系統會關閉先前針對動畫控件開啟的 AVI 剪輯,如果有的話。

nID
AVI 資源識別碼。 如果此參數為 NULL,系統會關閉先前針對動畫控件開啟的 AVI 剪輯,如果有的話。

傳回值

如果成功則不為零,否則為 0。

備註

AVI 資源會從建立動畫控件的模組載入。

Open 不支援 AVI 剪輯中的音效;您只能開啟無訊息 AVI 剪輯。

如果動畫控制元件具有 ACS_AUTOPLAY 樣式,動畫控件就會在開啟剪輯之後立即自動開始播放剪輯。 當您的線程繼續執行時,它會繼續在背景播放剪輯。 當剪輯完成播放時,它會自動重複。

如果動畫控件具有 ACS_CENTER 樣式,AVI 剪輯會置中於控件中,而且控件的大小不會變更。 如果動畫控件沒有 ACS_CENTER 樣式,當 AVI 剪輯開啟至 AVI 剪輯中的影像大小時,控件將會重設大小。 控件左上角的位置不會變更,只會變更控件的大小。

如果動畫控制元件具有 ACS_TRANSPARENT 樣式,則會使用透明背景繪製第一個畫面格,而不是動畫剪輯中指定的背景色彩。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

CAnimateCtrl::P lay

呼叫此函式以在動畫控件中播放 AVI 剪輯。

BOOL Play(
    UINT nFrom,
    UINT nTo,
    UINT nRep);

參數

nFrom
開始播放之畫面的以零起始的索引。 值必須小於 65,536。 值為 0 表示從 AVI 剪輯中的第一個畫面開始。

nTo
播放結束之畫面的以零起始的索引。 值必須小於 65,536。 值 - 1 表示結尾為 AVI 剪輯中的最後一個畫面。

nRep
重新執行 AVI 剪輯的次數。 值 - 1 表示無限期地重新執行檔案。

傳回值

如果成功則不為零,否則為 0。

備註

當您的線程繼續執行時,動畫控件會在背景播放剪輯。 如果動畫控制元件具有 ACS_TRANSPARENT 樣式,AVI 剪輯將會使用透明背景播放,而不是動畫剪輯中指定的背景色彩。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

CAnimateCtrl::Seek

呼叫此函式以靜態方式顯示 AVI 剪輯的單一畫面。

BOOL Seek(UINT nTo);

參數

nTo
要顯示的框架以零起始的索引。 值必須小於 65,536。 值為 0 表示在 AVI 剪輯中顯示第一個畫面。 值為 -1 表示在 AVI 剪輯中顯示最後一個畫面。

傳回值

如果成功則不為零,否則為 0。

備註

如果動畫控制樣 ACS_TRANSPARENT 式,則 AVI 剪輯會使用透明背景繪製,而不是動畫剪輯中指定的背景色彩。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

CAnimateCtrl::Stop

呼叫此函式以停止在動畫控件中播放 AVI 剪輯。

BOOL Stop();

傳回值

如果成功則不為零,否則為 0。

範例

請參閱 CAnimateCtrl::CAnimateCtrl 的範例

另請參閱

CWnd 類別
階層架構圖表
CAnimateCtrl::Create
ON_CONTROL