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。
CAnimateCtrl
標頭: afxcmn.h
建構 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;
}
關閉先前在動畫控件中開啟的 AVI 剪輯(如果有的話),並將它從記憶體中移除。
BOOL Close();
如果成功則不為零,否則為 0。
請參閱 CAnimateCtrl::CAnimateCtrl 的範例。
建立動畫控件,並將它附加至 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
對象產生關聯。
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_所指定。
指出音訊-視訊交錯 (AVI) 剪輯是否正在播放。
BOOL IsPlaying() const;
如果 AVI 剪輯正在播放,則為 TRUE;否則為 FALSE。
這個方法會 傳送 windows SDK 中所述的ACM_ISPLAYING 訊息。
呼叫此函式以開啟 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 的範例。
呼叫此函式以在動畫控件中播放 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 的範例。
呼叫此函式以靜態方式顯示 AVI 剪輯的單一畫面。
BOOL Seek(UINT nTo);
nTo
要顯示的框架以零起始的索引。 值必須小於 65,536。 值為 0 表示在 AVI 剪輯中顯示第一個畫面。 值為 -1 表示在 AVI 剪輯中顯示最後一個畫面。
如果成功則不為零,否則為 0。
如果動畫控制樣 ACS_TRANSPARENT
式,則 AVI 剪輯會使用透明背景繪製,而不是動畫剪輯中指定的背景色彩。
請參閱 CAnimateCtrl::CAnimateCtrl 的範例。
呼叫此函式以停止在動畫控件中播放 AVI 剪輯。
BOOL Stop();
如果成功則不為零,否則為 0。
請參閱 CAnimateCtrl::CAnimateCtrl 的範例。